0

文字列に含まれる文字、数字、空白、および行の数を保存する必要があります。

char string[2048];
...
string = "aaa 111\nsas 23 d\nds";
for(i = 0; i < strlen(string); i++){
    if (isdigit(string[i]) != 0){
        numbers++;
    } else if (isascii(string[i]) != 0){
        letters++;
    } ...
}

「型 'char *' から型 'char[2048]' に代入するときに互換性のない型です」などのエラーが多く発生しました。

そのコードの何が問題になっていますか?

ありがとう、ロレンツォ

4

4 に答える 4

1

短縮版

string をサイズ 2048 の char の配列として宣言しました:

char string[2048];

ポインターである char* を割り当てるため、この行は問題を引き起こしています。

string = "aaa 111\nsas 23 d\nds";

char* を反復処理し、文字列の末尾に到達するまで要素をコピーする次のコマンドを試してください。

strcpy(string, "aaa 111\nsas 23 d\nds");

この char[] に初期値を与えるだけの場合は、次を使用します。

char string[2048] = "aaa 111\nsas 23 d\nds";

ロングバージョン

この場合、何をしても問題ありませんが、実際には、固定サイズの文字配列を使用するのは危険な場合があります。2048 文字を超える文字列をコピーしようとすると、この変数に割り当てられたスペースの後に書き込むことになります。

単に割り当てることができない理由は、それらが char の配列であり、C で実際に定義された操作ではないためです2048*sizeof(char)。2 番目の引数を反復処理し、文字列の末尾を示す文字がstrcpy()見つかるまで文字をコピーします。0

strncpy()バッファよりも大きな文字列がある場合は、より安全であるため、確認することをお勧めします。マニュアルページから:

stpncpy() および strncpy() 関数は、最大 n 文字を s2 から s1 にコピーします。s2 の長さが n 文字未満の場合、s1 の残りは `\0' 文字で埋められます。それ以外の場合、s1 は終了しません。

于 2013-06-17T16:49:38.190 に答える
0
char string[2048] = "aaa 111\nsas 23 d\nds";
n = strlen(string);
for(i = 0; i < n; i++){
    if (isdigit(string[i]) != 0){
        numbers++;
    } else if (isascii(string[i]) != 0){
        letters++;
    } ...
}
于 2013-06-17T16:42:46.930 に答える