尝试将 char *str
复制到 char c[]
中,但出现分段错误或无效的初始化程序错误。
为什么这段代码会给我一个分段错误?
char *token = "some random string";
char c[80];
strcpy( c, token);
strncpy(c, token, sizeof c - 1);
c[79] = '\0';
char *broken = strtok(c, "#");
尝试将 char *str
复制到 char c[]
中,但出现分段错误或无效的初始化程序错误。
为什么这段代码会给我一个分段错误?
char *token = "some random string";
char c[80];
strcpy( c, token);
strncpy(c, token, sizeof c - 1);
c[79] = '\0';
char *broken = strtok(c, "#");
/* code not tested */
#include <string.h>
int main(void) {
char *src = "gkjsdh fkdshfkjsdhfksdjghf ewi7tr weigrfdhf gsdjfsd jfgsdjf gsdjfgwe";
char dst[10]; /* not enough for all of src */
strcpy(dst, src); /* BANG!!! */
strncpy(dst, src, sizeof dst - 1); /* OK ... but `dst` needs to be NUL terminated */
dst[9] = '\0';
return 0;
}
char c[80];
strcpy( c, token);
strncpy(c, token, sizeof c - 1);
c[79] = '\0';
char *broken = strtok(c, "#");
- Alex Xanderchar *s = "abcdef";
char c[6];
strncpy(c, s, sizeof(c)-1);
// strncpy is not adding a \0 at the end of the string after copying it so you need to add it by yourself
c[sizeof(c)-1] = '\0';
strcpy(c, token)
char *str = "Hello";
char c[6];
strcpy( c, str );
字符数组 c[] 必须有一定的大小;
例如:
char c[]= "example init string";
// 这将设置表c为c[19]; 您可以直接在程序开头分配它;
char c[19] = {0}; // null filled table
char c[i]是指针,因此您不需要复制任何内容; char c[19]; c =“示例初始化字符串”; //现在&c[0]指向相同的地址;
可以使用以下方式进行复制:
strcpy(dst, src);
但是微软强制要求您使用安全函数:
strcpy_s(dst,buffsize,src);
char c[] = "test";
创建了一个有5个元素的数组。char *c = "test"
则创建了一个指向有5个元素的数组的指针。它们的 sizeof
也不同! - pmg编辑:
感谢您添加代码。
也许段错误发生在这里:
strncpy(c, token, sizeof c - 1);
sizeof 的优先级与从右到左的减号相同,因此它很可能被处理为:
strncpy(c, token, sizeof( c - 1 ) );
而不是
strncpy(c, token, sizeof(c) - 1);
这可能是您想要的
(参考: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence)
我已经有一段时间没有编写C/C++代码了,但是c[80]可能是在堆栈上分配的。如果您使用char * c和strdup或类似函数,则可以将其分配在堆上,以便strtok可以访问它。
尝试像这样做。
char *token = "some random string";
char *c;
c = strdup(token);
char *broken = strtok(c, "#");
free(c);
char text[] = "Some sample text";
char* str = &text;
// To create a copy of string into another string of same size from pointer array.
char temp[strlen(str)+1];
strcpy(temp,str);