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
また、 'sizeof'演算子は' word'の文字数を数えないので、OPのコードでコメントアウトされた 'fgets(word、sizeof(word)、stdin);'は間違っています。 'word'変数の型であり、wordはポインタ' sizeof(word) 'なので、ポインタのサイズ、つまり 'sizeof(char *)'を与えます。 OPがこの解決法を使用する場合、その場合には、「sizeof」演算子がうまく適用されます。 –
@colinmcpああ、また、scanf( "%79s"、word);を実行するバッファオーバーフローを防ぎます。ヌル終了バイトを考慮する必要があるので、配列のサイズから1を引いた数です。 –