包括
#include <string.h>
int main()
{
char *array[10]={};
char* token;
token = "testing";
array[0] = "again";
strcat(array[0], token);
}
为什么返回分段错误?
我有点困惑。
最佳答案
从技术上讲,这不是有效的C.(它是有效的C++)。
char *array[10]={};
你应该用
char *array[10] = {0};
这将声明一个包含10个指向char的指针的数组,并将它们初始化为空指针。
char* token;
token = "testing";
这将标记声明为指向char的指针,并将其指向不可修改的字符串文本。
array[0] = "again";
这将
char
的第一个array
指针指向一个字符串文本,该文本(再次)是一个不可修改的字符序列。strcat(array[0], token);
strcat
将一个字符串连接到另一个字符串的末尾要使其工作,第一个字符串必须包含在可写存储中,并且具有足够的多余存储空间,以便在第一个字符串中第一个终止空字符('\0')处和之后包含第二个字符串这两个都不适用于直接指向字符串文本的array[0]
。你要做的就是这样(您需要
#include
<string.h>
和<stdlib.h>
)我已经进行了大小的运行时计算和内存的动态分配,因为我假设您正在进行一个测试,测试字符串将来可能不具有已知大小使用编译时已知的字符串,您可以避免编译时的某些(或大部分)工作;但是,您也可以将
"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 - 字符* a [10]的strcat问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3270822/