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

我是新来的C和想分开两个部分的string。 这是我的代码:

#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] = '\0'; fprintf(stderr, "a -> %s\n", *a); strncpy(*b, c+3, 3); *b[3] = '\0'; 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); } 

我想在variablesbavariables和def 。 但我的问题是,它与Segmentation Fault失败。 我运行这个后,我得到这个输出:

 a -> abc Segmentation fault 

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

gcc test.cpp -o test.exe

对不起,如果问题听起来很傻。 谢谢。

数组下标运算符[]具有更高的优先级,然后是解引用运算符*

所以你想改变

 *a[3] = ... 

成为

 (*a)[3] = ... 

b同样。


把编译器的警告级别设置得足够高,它应该已经警告过你。 或者至少告诉你,他们是有点可疑的

 *a[3] = '\0';