尝试连接二维数组的元素时出现分段错误
Segmentation fault when trying to concatenate an element of a 2d array
我想使用 strcat()
连接字符串数组的一个元素。我试过了:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char **str = malloc(sizeof(char *) * 3);
for (int i = 0; i < 3; i++) {
str[i] = malloc(sizeof(char) * 8);
}
str[0] = "foo";
str[1] = "bar";
strcat(str[0], "H");
for (int i = 0; i < 3; i++) {
printf("%s\n", str[i]);
}
free(str);
return 0;
}
我收到错误:
Segmentation fault (core dumped)
我应该怎么做才能正确?
对于初学者来说,该程序存在内存泄漏。首先分配内存并将其地址存储在指针 str[i]
中
for (int i = 0; i < 3; i++) {
str[i] = malloc(sizeof(char) * 8);
}
然后指针str[0]和str[1]被字符串文字的地址重新分配。
str[0] = "foo";
str[1] = "bar";
因此,您不能通过此语句更改字符串文字
strcat(str[0], "H");
因为这会调用未定义的行为
你必须写
strcpy( str[0], "foo" );
strcpy( str[1], "bar" );
而这个循环
for (int i = 0; i < 3; i++) {
printf("%s\n", str[i]);
}
还会调用未定义的行为,因为元素 str[2] 未由字符串初始化。
您需要像 i < 2
那样更改条件或循环,或者初始化元素 str[2]。
并且你需要像
一样释放所有分配的内存
for (int i = 0; i < 3; i++) {
free( str[i] );
}
free( str );
我想使用 strcat()
连接字符串数组的一个元素。我试过了:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char **str = malloc(sizeof(char *) * 3);
for (int i = 0; i < 3; i++) {
str[i] = malloc(sizeof(char) * 8);
}
str[0] = "foo";
str[1] = "bar";
strcat(str[0], "H");
for (int i = 0; i < 3; i++) {
printf("%s\n", str[i]);
}
free(str);
return 0;
}
我收到错误:
Segmentation fault (core dumped)
我应该怎么做才能正确?
对于初学者来说,该程序存在内存泄漏。首先分配内存并将其地址存储在指针 str[i]
中for (int i = 0; i < 3; i++) {
str[i] = malloc(sizeof(char) * 8);
}
然后指针str[0]和str[1]被字符串文字的地址重新分配。
str[0] = "foo";
str[1] = "bar";
因此,您不能通过此语句更改字符串文字
strcat(str[0], "H");
因为这会调用未定义的行为
你必须写
strcpy( str[0], "foo" );
strcpy( str[1], "bar" );
而这个循环
for (int i = 0; i < 3; i++) {
printf("%s\n", str[i]);
}
还会调用未定义的行为,因为元素 str[2] 未由字符串初始化。
您需要像 i < 2
那样更改条件或循环,或者初始化元素 str[2]。
并且你需要像
一样释放所有分配的内存for (int i = 0; i < 3; i++) {
free( str[i] );
}
free( str );