我是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] = '\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);
}
我想abc
变量a
和变量def
变b
。但我的问题是它失败了Segmentation Fault
。在我运行之后,我得到了这个输出:
a -> abc
Segmentation fault
我无法理解为什么。我使用cygwin
并使用命令
gcc test.cpp -o test.exe
很抱歉,如果问题听起来很愚蠢。谢谢。
答案 0 :(得分:3)
array-subscript-operator []
的优先级高于取消引用运算符*
。
所以你要改变
*a[3] = ...
是
(*a)[3] = ...
b
相同。
将编译器的警告级别设置得足够高,应该已经警告过你。或者至少告诉你,他们的东西很可疑
*a[3] = '\0';