如何让它不共享相同的内存

时间:2012-09-20 13:18:32

标签: c

#include <stdio.h>
typedef struct TESTCASE{
    char *before; 
}ts;
int main(void) {
     ts t[2] = {{"abcd"}, 
                {"abcd"}};
     t[0].before[0] = t[0].before[2] = t[0].before[3] = 'b';
     printf("%s - %s\n", t[0].before, t[1].before);
     return 0;
}

输出

bbbb - bbbb

我在Cygwin中用gcc编译

cc -g test.c -o test

我的问题是,使用什么编译选项,我可以获得bbbb的结果 - abcd?

2 个答案:

答案 0 :(得分:5)

你不应该写字符串,它们是“不可变的”,写入它会导致未定义的行为。

因此,编译器可以为两个字符串使用相同的位置。

提示:strdup() - what does it do in C?

答案 1 :(得分:0)

t[0].before[3] = 'b';会在某些系统上执行细分错误。你不能写成常量字符串。

#include <stdio.h>
typedef struct TESTCASE{
  char before[5];
}ts;
int main(void) {
  ts t[2] = {{ {'a','b','c','d',0} },
             { {'a','b','c','d',0} }};
  t[0].before[0] = t[0].before[2] = t[0].before[3] = 'b';
  printf("%s - %s\n", t[0].before, t[1].before);
  return 0;
}