1
int main()
{
int a = 0;
int BUFSIZE = 1000;
char *string1[20];
FILE *fp1 = fopen("input1.txt", "r");
if (fp1 == 0)
{
    fprintf(stderr, "Error while opening");
    return 0;
}
string1[a] = (char *)malloc(BUFSIZE);
while (fgets(string1[a], BUFSIZE, fp1)!=NULL)
{
    a++;
    string1[a] = (char *)malloc(BUFSIZE);
} 
printf("%c", string1[3]);
}

こんにちは、テキスト ファイルから文字列を読み取り、それを配列に格納する上記のコードを取得しました。配列string1の特定の要素を出力したいのですが、どうやらprintfがうまくいきません。その上、char *string1[20] は正確には何を定義しているのでしょうか? ポインタと関係がありますか?ありがとう!</p>

4

5 に答える 5

6
char *string1[20]

string1への 20 個のポインタからcharなるという名前の配列を宣言します。したがってstring1[3]、 は へのポインタであり、形式に必要な ではcharありません。char%c

だったのでstring1[3]- もしあったとしても - 経由fgetsで埋められたので、0で終わる文字列が含まれているので、

printf("%s\n", string1[3]);

単一の文字を印刷する場合は、次を使用します

printf("%c\n", string1[3][4]);

例えば。

于 2012-11-10T19:17:13.487 に答える
0
char* string1[20];

配列へのポインターを定義しますがchar、これは必要なものではありません。char配列が必要です。

このような *宣言でを削除するとstring1

char string1[20];

それはうまくいくはずです。

編集:ダニエル・フィッシャーは正しい...それはcharへのポインタの配列です。
それにもかかわらず、あなたが何をしようとしているのかは明らかではありません。
ファイルを単一の配列に読み込むだけの場合は、次のようにすることができます。

int BUFSIZE = 1000;
char string[BUFSIZE];
FILE *fp1 = fopen("input1.txt", "r");
if ( fp1 == 0 )
{
    fprintf(stderr, "Error while opening");
    return 0;
}
fgets(string1, BUFSIZE, fp1);
printf("%s", string1); // print the whole file content
printf("%c", string1[3]); // print the fourth character
于 2012-11-10T19:16:56.843 に答える
0

ポインタと関係があります。

string1基本的に、 string1*
には、データを指し示すものは何も含まれていません。したがって、 string1[20] の値は必要ありません。その値が必要です

 printf("%c", *string1[19]);

すべき

于 2012-11-10T19:21:08.360 に答える
0

char*char へのポインターを定義します。

char string[20]20 文字の配列を定義します。

char* string[5]5 char* の配列または char へのポインターを定義します。

たとえば、char の配列があり、それを null で終了する文字列として使用する場合は、次のように最初の要素のアドレスを取得する必要があります。

char array[20];
char* pointer = &array[0];

あなたの場合、char* string[20]charポインタの配列です。

于 2012-11-10T19:21:56.643 に答える
0

char *string[20];「char」へのポインタの配列で、文字を「文字列」の配列として格納するために使用できます。たとえば、C には C++ とは異なり文字列データ型がないため、「文字列」と書きました。

于 2012-11-10T19:22:46.707 に答える