1

2 つの文字列を連結する以下のコードがあります。最初の while 条件は機能しますが、2 番目の for ループは失敗します。以下の入力でそれらを個別に実行しました。

int original[100]="c" , add[50] = "pgm";
concatenate_string(original, add);   
printf("String after concatenation is \"%s\"\n", original);
//strcat(original,add);
//printf("strcat is : %s",original);


void concatenate_string(char *original, char *add)
    {
       while(*original)
          original++;

       while(*add)
       {
          *original = *add;
          add++;
          original++;
       }
       *original = '\0';
    }

void strcat(char *original,char *add)
{
    for (;*original++;);
    for (;*add;)
         *original++=*add++;
    *(original)='\0';

}
4

3 に答える 3

7

\02番目のコードでは、ヌル記号の後に文字列を追加しているため:

for (;*original++;);
        ^  always increments, even after nul found 

次のようにする必要があります。

for (;*original; original++);

ノート:

コードの場合:

for (;*original++;);

と同等です

while (*original++); 

しかし、あなたが使っているものではありません。

于 2013-09-05T06:51:07.687 に答える
2

2 番目のバージョンは、++2 番目のループが開始する前に余分な処理を行います。--original;2 つのループの間、または 2 番目のループの初期化として追加してみてください。

于 2013-09-05T06:50:54.700 に答える
0
#include<stdio.h>
#include<string.h>

void string_add(char *original,char *add) {
    int i = 0,j,length = 0;
    i = strlen(original);
    length = strlen(add);
    for(j = 0; j<length; j++,i++)
        original[i] = add[j];
}

int main()
{
    char original[20] = "I am from ", add[10] = "india";
    string_add(original, add);
    printf("Concatinated : %s\n",original);
    return 0;
}
于 2013-09-13T09:44:36.650 に答える