6
因此,我重新熟悉了C,而這個概念讓我特別被卡住了。如何將字符串添加到字符串數組中C
目標是創建一個動態分配的字符串數組。我做了這件事,首先創建一個空數組,併爲每個輸入的字符串分配適當的空間量。唯一的問題是,當我嘗試添加一個字符串時,我遇到了seg錯誤!我不知道爲什麼,我有一個預感,它是來自不正確的分配,因爲我看不到我的strcpy函數有什麼問題。
我在這個網站上詳細查看了一個答案,我找到了幫助,但不能完成交易。任何幫助,你可以提供將不勝感激!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int count = 0; //array index counter
char *word; //current word
char **array = NULL;
char *term = "q"; //termination character
char *prnt = "print";
while (strcmp(term, word) != 0)
{
printf("Enter a string. Enter q to end. Enter print to print array\n");
// fgets(word, sizeof(word), stdin); adds a newline character to the word. wont work in this case
scanf("%s", word);
//printf("word: %s\nterm: %s\n",word, term);
if (strcmp(term, word) == 0)
{
printf("Terminate\n");
}
else if (strcmp(prnt, word) == 0)
{
printf("Enumerate\n");
int i;
for (i=0; i<count; i++)
{
printf("Slot %d: %s\n",i, array[i]);
}
}
else
{
printf("String added to array\n");
count++;
array = (char**)realloc(array, (count+1)*sizeof(*array));
array[count-1] = (char*)malloc(sizeof(word));
strcpy(array[count-1], word);
}
}
return ;
}
啊!我多麼愚蠢,似乎總是被忽視的細節。這固定幫助像魅力。非常感謝! – colinmcp
另外,'fgets(word,sizeof(word),stdin);'在OP代碼中註釋掉'是錯誤的,因爲'sizeof'運算符不會計算'word'的字符數,而是返回'word'變量的類型,並且由於單詞是指針'sizeof(word)'將給出指針的大小,即'sizeof(char *)'。如果OP使用這種解決方案,那麼在這種情況下'sizeof'運算符就很適用。 –
@colinmcp呵呵,還要防止緩衝區溢出做'scanf(「%79s」,word);'這個數字是數組的大小減1,因爲你應該考慮空終止字節。 –