私は、cでreadシステムコールを使用して読み込まれる動的に割り当てられた文字列の配列を保持しようとしています。ここで私が何をしようとしています何の小さなサンプルです:calloc/mallocと奇妙な動作を読んでいますか?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void processInput() {
char ** array = (char **) calloc(20, sizeof(char*));
int arrayIndex = 0;
while(1) {
printf("Type something: ");
fflush(stdout);
char* buffer;
int readResult = read(0, buffer, 100);
array[arrayIndex] = (char*)calloc(readResult, sizeof(char));
}
}
はしかし、これはいくつかの奇妙な問題が発生します。
Type something: a Type something: Type something: a Type something: Type something: abcdefg Type something: Type something: Type something: Type something: Type something: Type something: Type something: Type something:
は、このために任意の説明がありますか?なぜこれが起こっているのか分かりません。
'char * buffer; readResult = read(0、buffer、100); '初期化されていない変数、特に初期化されていないポインタの使用は、涙で終わることがあります。 –
あなたは 'arrayIndex'をインクリメントしていません – Kevin
申し訳ありませんが、この例はやや厄介でした。あなたはarrayIndexをインクリメントしていないということは間違いありませんが、この例では重要ではありませんでした。しかし実際には、arrayIndexをインクリメントする必要があることを100%修正しています。それ以外の場合は、索引0:Pに最後に追加された項目以外の項目は格納されません。 – Ryan