我是新来的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); }
我想在variablesb
上a
variables和def
。 但我的问题是,它与Segmentation Fault
失败。 我运行这个后,我得到这个输出:
a -> abc Segmentation fault
我不明白为什么。 我正在使用cygwin
并用命令构build它
gcc test.cpp -o test.exe
对不起,如果问题听起来很傻。 谢谢。
数组下标运算符[]
具有更高的优先级,然后是解引用运算符*
。
所以你想改变
*a[3] = ...
成为
(*a)[3] = ...
b
同样。
把编译器的警告级别设置得足够高,它应该已经警告过你。 或者至少告诉你,他们是有点可疑的
*a[3] = '\0';