字符串跟字符数组的区别
字符串和字符数组的区别
一个小程序:逆序输出字符串,例如输入“china”,输出anihc。问题是main函数中为char p[] = "china";时正常运行,若改成char *p = "china";则崩溃。请教为什么????
------解决思路----------------------
C 语言中凡是双引号引起来的字符串直接赋值给指针或作为参数,编译器将其视为:
const char *p ="china" ,这个通不过;char *p ='c',这个就可以。
------解决思路----------------------
char *p = "china" 中的字符串是分配在了常量区,然后让指针指向他,你修改他的值就出错了
而字符数组则是你在栈上分配的,所以可以修改
------解决思路----------------------
回楼主"china" 字符串常量是不能修改的
另外
C语言的 "china" 没有const的
所以 char* p = "china" 没什么问题
倒是你后面是char *p ='c' 你是怎么想的 p是char* 'c'是int 可以????
------解决思路----------------------
字符串常量的值是不能修改的。
一个小程序:逆序输出字符串,例如输入“china”,输出anihc。问题是main函数中为char p[] = "china";时正常运行,若改成char *p = "china";则崩溃。请教为什么????
#include <stdio.h>
#include <string.h>
void reverse(char *s, int len)
{
char ch;
if (len > 1) {
ch = *s;
*s = *(s+len-1);
*(s+len-1) =ch;
reverse(s+1, len-2);
}
}
int main()
{
char *p = "china";
int len = strlen(p);
reverse(p, len);
printf("%s", p);
return 0;
}
------解决思路----------------------
C 语言中凡是双引号引起来的字符串直接赋值给指针或作为参数,编译器将其视为:
const char *p ="china" ,这个通不过;char *p ='c',这个就可以。
------解决思路----------------------
char *p = "china" 中的字符串是分配在了常量区,然后让指针指向他,你修改他的值就出错了
而字符数组则是你在栈上分配的,所以可以修改
------解决思路----------------------
回楼主"china" 字符串常量是不能修改的
另外
C语言的 "china" 没有const的
所以 char* p = "china" 没什么问题
倒是你后面是char *p ='c' 你是怎么想的 p是char* 'c'是int 可以????
------解决思路----------------------
字符串常量的值是不能修改的。