3

私はクラスプロジェクトに取り組んでいますが、本当に助けが必要です。私が理解する必要があるのは、1つのテキストファイルまたは2つの別々のファイルから2つの文字列を読み取り、それぞれ2つの配列に格納することです。文字列の長さは任意ですが、それほど長くする必要はありません。各配列のサイズは、対応する文字列の長さに応じて自動的に調整できます。

Stack Overflowを検索していくつかのコードを取得しましたが、を使用するコードを試していmalloc()ました。しかし、配列のサイズを取得しようとしたときに問題が発生しました。

int main(){
int i = 0;

int BUFSIZE = 1000;
char* string[20];
FILE *fp = fopen("input.txt", "r");
if (fp == 0){
    fprintf(stderr, "Error while opening");
    return 0;
}

string[i] = (char *)malloc(BUFSIZE);
while (fgets(string[i], BUFSIZE, fp)) {
    i++;
    string[i] = (char *)malloc(BUFSIZE);
} 

float len=sizeof(string);
printf("%f", len);  

int x;
for(x = 0; x<i; x++)
   free(string[x]);
scanf("%d", x);
fclose(fp);
return 0;
}

lenを出力しようとしましたが、文字列の長さに関係なく、定数値80を取得しました。また、2つの文字列を読み取り、2つの別々の配列に格納する方法がわかりません。コードに別の文字列を追加しようとするとエラーが発生しました。

4

2 に答える 2

2

これ:

float len=sizeof(string);

20個のポインターの配列である配列の静的サイズを提供しstring、各ポインターは4バイト、20 * 4バイト= 80であるため、常に80です。i文字列ごとにインクリメントするため、配列のサイズは既にあります。これは配列のサイズです。iサイズごとに表示されます。つまり、配列に割り当てた文字列の数、またはファイルの行数です。

編集:配列内の文字列の長さを取得したい場合は、strlen

while (fgets(string[i], BUFSIZE, fp)) {
    i++;
    len+=strlen(string[i]);
    string[i] = (char *)malloc(BUFSIZE);    
} 

注:そうすべきではありintませんfloatが、それは重要ではありません。

于 2012-11-09T19:31:07.250 に答える
1

文字列の長さが必要な場合は、使用する必要があります

strlen(string[i]);

あなたがしていることは、実際には80(20 * 4)である文字列のサイズを返すだけです。

于 2012-11-09T19:52:12.797 に答える