1

char 配列の表示が短い数文字である理由が気になります。ただし、length+2 を使用すると、すべての文字が表示されます。何が間違っているのかわかりません。あなたの助けに感謝します。Dev-C++ を使用しています

#include <iostream>
#include <string.h>


using namespace std;

char *Appendstring(char *a, char *b, char *c, char *d, char *e)  // will append b to the end of a
{
// char *buffer = new char[strlen(a)+strlen(b)+1];

 static char buffer[90];

    char *p=buffer;
    while(*p++=*a++); // Copy a into buffer
    while(*p++=*b++); // Copy b into buffer right after a
    while(*p++=*c++);  // Copy c into buffer right after b
    while(*p++=*d++);  // Copy d into buffer right after c
    while(*p++=*e++);  // Copy e into buffer right after d
    *p=0; // Null-terminate the string
    return buffer;  
}

int main ()
{
    char *new_string;
    int length;
    char *str="Because";
    char *add="it has been";
    char *addstr1="very warm";
    char *addstr2="lately";
    char *addstr3="Summer is coming!";


    length=strlen(str)+strlen(add)+strlen(addstr1)+strlen(addstr2)+strlen(addstr3)+1;  //total length of the new string

    new_string=Appendstring(str, add, addstr1, addstr2, addstr3);
    for (int i=0; i<=length+2; i++)  //Why do I need to do length+2 to have all characters displayed???
  cout<<new_string[i];

    return 0;
}
4

2 に答える 2

3

文字列コピー コードが間違っているためです。文字列の末尾にヌル バイトもコピーします。

これを試して

while (*a) // Copy a into buffer
    *p++ = *a++;
while (*b) // Copy b into buffer
    *p++ = *b++;

于 2013-05-03T17:21:41.890 に答える