包括
#include <string.h>
int main()
{
char *array[10]={};
char* token;
token = "testing";
array[0] = "again";
strcat(array[0], token);
}
为什么会返回 Segmentation fault?
我有点困惑。
最佳答案
从技术上讲,这不是有效的 C。(不过它是有效的 C++。)
char *array[10]={};
你应该使用
char *array[10] = {0};
这声明了一个包含 10 个指向 char 的指针的数组,并将它们全部初始化为空指针。
char* token;
token = "testing";
这将 token 声明为指向 char 的指针,并将其指向不可修改的字符串文字。
array[0] = "again";
这个点第一个char
array
的指针在一个字符串文字上,它(再次)是一个不可修改的 char 序列。
strcat(array[0], token);
strcat
将一个字符串连接到另一个字符串的末尾。要使其正常工作,第一个字符串必须包含在可写存储中,并且有足够的额外存储空间以在第一个字符串中的第一个终止空字符 ('\0') 处及之后包含第二个字符串。这些都不适用于 array[0]
它直接指向字符串文字。
你需要做的是这样的事情。 (你需要 #include
<string.h>
和 <stdlib.h>
。)
我已经进行了运行时大小计算和内存动态分配,因为我假设您正在测试 future 字符串大小可能未知的位置。使用在编译时已知的字符串,您可以避免一些(或大部分)编译时的工作;但你也可以做 "againtesting"
作为单个字符串文字。
char* token = "testing";
char* other_token = "again";
/* Include extra space for string terminator */
size_t required_length = strlen(token) + strlen(other_token) + 1;
/* Dynamically allocated a big enough buffer */
array[0] = malloc( required_length );
strcpy( array[0], other_token );
strcat( array[0], token );
/* More code... */
/* Free allocated buffer */
free( array[0] );
关于c - char *a[10] 的 strcat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3270822/