0
    int main()
    {
        char *ch="girl";
        int x=strlen(ch);
        *ch=ch[x];
        printf("%c",*ch);
        getch();
        return 0;
    }

为什么在将 NULL 值分配给字符指针的过程中会出现运行时错误?

4

3 回答 3

2

代替

char *ch = "girl"

char ch[] = "girl"

前者创建一个指向不可变内存的指针,后者创建一个char[]大小合适的数组并用“girl”的字母(包括终止的零字节)初始化它。

于 2013-02-09T13:10:11.013 回答
1

更新:感谢@dreamlax

"girl"被隐式声明为 a char *。但很可能您的编译器将字符串文字放入一个部分(rostrings)中,该部分稍后将放置在受保护的内存区域中。当您尝试为其分配某些内容时*ch,它将访问此受保护(或不取决于您的平台)的内存。

编译器应该警告您有关 char 的信息*ch = "girl";

于 2013-02-09T12:53:03.297 回答
-1

和这个

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
于 2013-02-09T12:55:45.623 回答