0

私は Android と Java の開発者ですが、C 言語にはあまり詳しくありません。ご存知のように、C には String 型がありません。必要なのは、char を取得し、それらを char 配列に入れ、これらの文字を文字列として書き込むことだけです。文字の配列である文字列全体を取得して変数に入れるにはどうすればよいですか? これは私のコードですが、正しく動作しません。私が得るログは次のとおりです。

I/        ( 2234): *********PROPERTY = 180000€¾Ü    €¾Ü €¾ 

18万だったはず。

int c;
char output[1000];
int count = 0;
char *property;
FILE *file;
file = fopen("/cache/lifetime.txt", "r");
LOGI("****************FILE OPEN*************");
if (file) {
    LOGI("*****************FILE OPENED************");
    while ((c = getc(file)) != EOF) {
        putchar(c);
        output[count] = c;
        ++count;
        LOGI("******C = %c", c);
    }
    property = output;
    LOGI("*********PROPERTY = %s", property);
    fclose(file);
}
4

2 に答える 2

1

あなたが欠けているのは'\0'. C のすべての文字列は、. で終わる単なる一連の文字'\0'です。

だから、一度あなたのループ

while ((c = getc(file)) != EOF)

完了したら、ステートメントを追加できます

output[count] = '\0'

property変数をローカル関数の外部で返す場合、および が関数に対してローカルな変数である場合は、以下の変更が必要ですoutput

上記の以下の行は変更が必要です

property = output; 

mallocを使用してプロパティにメモリを割り当ててから、 strcpyを使用して出力の文字列をプロパティにコピーするか、コメントで Joachim が提案したようにstrdupを実行する必要があります。

strdup を使用すると、ステートメントは次のようになります。

property = strdup(output); 
于 2012-08-10T06:29:36.063 に答える
0

文字数がコンパイル時または実行時にわかっているかどうかを判断し、配列を静的または動的に割り当てます。

char some_property [N+1]; // statically allocate room for N characters + 1 null termination

// or alternatively, dynamic memory allocation:
char* property = malloc (count + 1);

次に、データを新しい変数にコピーします。

memcpy(some_string, output, count); 

some_string[count] = '\0'; // null terminate

...
free(property); // clean up, if you used dynamic memory (and only then)

または、入力の最後に null 終端を追加して、既に配置されている「出力」変数を使用するだけです。

于 2012-08-10T06:34:44.207 に答える