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=]';
我是 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=]';