strncpy() 在第二次调用同一源时失败

strncpy() fails on second call for same source

我是 c 的新手,想将字符串分成两部分。这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void test(char** a, char** b)
{
  const char * c = "abcdef";

  *a = (char *)malloc(4* sizeof(char));
  *b = (char *)malloc(4* sizeof(char));


  strncpy(*a, c, 3);

  *a[3] = '[=10=]';

  fprintf(stderr, "a -> %s\n", *a);



  strncpy(*b, c+3, 3);

  *b[3] = '[=10=]';

  fprintf(stderr, "b -> %s\n", *b);

}

int main()
{
setvbuf (stderr, NULL, _IONBF, 0);
char *a = NULL;
char *b  = NULL;

test(&a, &b);

fprintf(stderr, "a -> %s\n", *a);
fprintf(stderr, "b -> %s\n", *b);
}

我想在 a 变量上有 abc,在变量 b 上有 def。但我的问题是它因 Segmentation Fault 而失败。在我 运行 这之后我得到这个输出:

a -> abc
Segmentation fault

我不明白为什么。我正在使用 cygwin 并使用命令

构建它

gcc test.cpp -o test.exe

抱歉,如果问题听起来很愚蠢。谢谢。

数组下标运算符 [] 的优先级高于解引用运算符 *

所以你想改变

*a[3] = ...

成为

(*a)[3] = ...

b 相同。


将编译器的警告级别设置得足够高,它应该就此警告您。或者至少告诉你他们的东西有点可疑

*a[3] = '[=12=]';