2

の形式の2D文字配列がありarr[][]ます。この配列のi番目またはj番目の行の最後と場合によっては最初に1文字を追加する必要があります。コードスニペットは次のとおりです。

 arr[j] = strcat(arr[j],")");
 arr[i] = strcat("(",arr[i]);

コードをコンパイルすると、エラーが発生します:割り当てに互換性のないタイプがあります。今、私は仮定しarr[j]arr[i]いて、文字列です。どこが間違っているのですか?言い換えると、文字列の先頭に文字を追加または追加するためのベストプラクティスは何ですか?

4

2 に答える 2

5

まず、char *returnedbystrcatを既存の配列行に割り当てることはできません。

ただし、さらに重要なstrcatのは、連結の結果を使用して新しい文字列を割り当てず、代わりに最初の文字列のインプレースで連結を実行することです。戻り値は常に最初の文字列であり、便利です。したがって、最初のケースでは、次のことを行う必要があります。

strcat(arr[j],")");

arr[j](追加されたキャラクターに対して十分な大きさであると仮定します)

)2番目のケースは、既存の文字列の先頭にを追加する必要があるため、より複雑です。arr[j]たとえば、別のバッファで操作を実行してから、を使用するようにコピーして戻すstrcpyか、文字列の内容全体を1文字前に移動して、括弧を手動で追加できます。

memmove(arr[j]+1, arr[j], strlen(arr[j]));
arr[j][0]='(';

あなたの間違いから、それchar *は他の言語の文字列クラスのようだと思うのではないかと思いますが、残念ながらそうではありません。Cの文字列は文字の単なる配列であり、高級言語のように派手な商品を期待しないでください。

于 2012-08-26T15:34:42.277 に答える
1

Pl。以下の簡単な例が役立つかどうかを確認してください。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char* argv[])
{
    char myarray[2][10], *temp;

    //Populating something in the array
    strcpy(myarray[0], "string1");
    strcpy(myarray[1], "string2");
    printf("%s\n", myarray[0]);
    printf("%s\n", myarray[1]);

    //Adding something at the end of the string..
    //Be careful to check if the source is large enough.
    //Also consider using strncat
    strcat(myarray[0], ")");
    printf("Appended at the end %s\n", myarray[0]);

    //Append at the beginning
    //Here you can use a temporary storage.
    //And pl. do the required error handling for insufficent space.
    temp = malloc(strlen(myarray[1]) + strlen("(") +1);
    strcat(temp, "(");
    strcat(temp, myarray[1]);
    strcpy(myarray[1], temp);
    printf("Appended at the beginning  %s\n", myarray[1]);
    free(temp);
    return 0;
}
于 2012-08-26T15:55:53.517 に答える