Gcc编译器C字符串赋值问题

Tne*_*ond 0 c string gcc tcc variable-assignment

我写了这段代码,因为我在写一个更大的程序时遇到了类似的问题.尽管如此,我知道问题是一样的,所以我做了一个小例子.

#include <stdio.h>

typedef struct
{
    int x;
    char * val;
}my_struct;

int main()
{
    my_struct me = {4, " "};
    puts("Initialization works.");
    me.val[0] = 'a';
    puts("Assignment works.");
    puts(me.val);
    puts("Output works.");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当使用tcc(Tiny C Compiler)编译时,它编译并执行正常.但是,使用GCC 4.6.0 20110513(预发行版)它会编译,但是,当我执行它时,我只能通过"初始化工作".在获得段错误之前.

我究竟做错了什么?是我的代码还是我的GCC编译器?

gee*_*aur 8

你的代码.ANSI允许字符串常量是只读的,这是鼓励的,因为这意味着它们可以跨程序的所有正在运行的实例在系统范围内共享; gcc除非你指定-fwritable-strings,否则tcc使它们可写(可能因为它更容易).