c - char *a[10] 的 strcat 问题

标签 c arrays string

包括

#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/

相关文章:

c - 错误消息 "expected ‘float ***’ 但参数的类型为 ‘float *’

javascript - 合并具有相同键值对的对象数组中的值

c - 在 C 中处理字符串

CUDA 编译器错误。没有指定输入文件;

c - 使用十六进制编辑器修改库中的 env 变量名称?

c - C 中的动态双数组

ruby - 生成数字数字的所有排列

java - 使用递归查找数组最大数量的代码始终返回数组中的最后一项

c# - 使字符串 URL 友好(例如 : convert Montréal to Montreal)

c - 如何有效地将字符串与短字符串文字进行比较