我想用來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)
我該怎么做才能做到正確?
uj5u.com熱心網友回復:
對于初學者來說,該程式存在記憶體泄漏。首先分配記憶體并將其地址存盤在指標 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 );
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386834.html
上一篇:C中字符陣列的快速排序陣列
