相关疑难解决方法(0)

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

无法修改C字符串

请考虑以下代码.

int main(void) {
    char * test = "abcdefghijklmnopqrstuvwxyz";
    test[5] = 'x';
    printf("%s\n", test);
    return EXIT_SUCCESS;
}

在我看来,这应该打印abcdexghij.但是,它只是终止而不打印任何东西.

int main(void) {
    char * test = "abcdefghijklmnopqrstuvwxyz";
    printf("%s\n", test);
    return EXIT_SUCCESS;
}

然而,这工作得很好,所以我误解了操纵C字符串或其他东西的概念吗?如果它很重要,我正在运行Mac OS X 10.6,它是我正在编译的32位二进制文​​件.

c cstring

8
推荐指数
2
解决办法
3545
查看次数

一些GCC编译器如何修改常量char指针?

我正在读一本书,标题为“理解和使用C指针”。在第110页上,这些行如下:

...但是,在某些编译器(例如GCC)中,可以修改字符串文字。考虑以下示例:

  char *tabheader = "Sound";
   *tabheader = 'L';
   printf("%s\n", tabheader);   //Displays "Lound"
Run Code Online (Sandbox Code Playgroud)

继续并描述其用法const char *tabheader将阻止修改此变量。

我目前正在使用Cloud 9 / Ubuntu。我使用GCC编译了这段代码并运行了它。segmentation fault如我所料,它导致了错误。

我对书中的这些陈述感到非常困惑。一直以来,我对语句的理解char *tabheader = "Sound";const char *tabHeader = "Sound"; 现在相同,这本书在说,这取决于哪个gcc编译器

我的问题是:哪个GCC编译器允许运行此代码?你对此的看法如何?这也属于未定义的行为吗?

c gcc

2
推荐指数
1
解决办法
225
查看次数

标签 统计

c ×3

c-strings ×1

cstring ×1

gcc ×1

segmentation-fault ×1