strncpy()第二次调用时出现相同的错误信息
问题描述:
我是新来的c,并且想要将字符串分成两部分。这里是我的代码:strncpy()第二次调用时出现相同的错误信息
#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
对不起构建它。谢谢。
答
数组下标运算符[]
比引用运算符*
具有更高的优先级。
所以,你想改变
*a[3] = ...
是
(*a)[3] = ...
同为b
。
已经将编译器的警告级别设置得足够高,它应该已经警告过你。或者至少告诉你,他们是
*a[3] = '\0';
非常感谢你有鬼:) – Jakomo
注意,'A [0] [3]'也将工作,而不用担心括号。 – ShadowRanger
@ShadowRanger:“*无需担心括号*”相同数量的其他括号/括号,还有一个字符('0')多于键入...... ;-) – alk