int main()
{
char *ch="girl";
int x=strlen(ch);
*ch=ch[x];
printf("%c",*ch);
getch();
return 0;
}
为什么在将 NULL 值分配给字符指针的过程中会出现运行时错误?
代替
char *ch = "girl"
和
char ch[] = "girl"
前者创建一个指向不可变内存的指针,后者创建一个char[]
大小合适的数组并用“girl”的字母(包括终止的零字节)初始化它。
更新:感谢@dreamlax
"girl"
被隐式声明为 a char *
。但很可能您的编译器将字符串文字放入一个部分(rostrings)中,该部分稍后将放置在受保护的内存区域中。当您尝试为其分配某些内容时*ch
,它将访问此受保护(或不取决于您的平台)的内存。
编译器应该警告您有关 char 的信息*ch = "girl";
。
和这个
int x=strlen(ch); //x=4
*ch=ch[x]; //you are out of bounds of array, because first element is 0, so last is 3