char*a的strcat问题[10]

use*_*552 1 c arrays string

包括

#include <string.h>

int main()
{
        char *array[10]={};
        char* token;
        token = "testing";
        array[0] = "again";
        strcat(array[0], token);
}
Run Code Online (Sandbox Code Playgroud)

为什么它返回分段错误?

我有点困惑.

CB *_*ley 7

从技术上讲,这不是有效的C.(但它是有效的C++.)

char *array[10]={};
Run Code Online (Sandbox Code Playgroud)

你应该用

char *array[10] = {0};
Run Code Online (Sandbox Code Playgroud)

这将声明一个包含10个指向char的指针的数组,并将它们全部初始化为null指针.

char* token;
token = "testing";
Run Code Online (Sandbox Code Playgroud)

这将令牌声明为指向char的指针,并将其指向不可修改的字符串文字.

array[0] = "again";
Run Code Online (Sandbox Code Playgroud)

这指向字符串文字的第一个char指针,array该字符串文字(再次)是不可修改的字符序列.

strcat(array[0], token);
Run Code Online (Sandbox Code Playgroud)

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] );
Run Code Online (Sandbox Code Playgroud)