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 回答
1

您实际上是在 for 循环中打印出 4 个不可打印的字符。

您的字符串中可打印的字符总数为 50。您的长度变量为 51,因为您将其加 1。然后for循环从0到51+2,一共会打印出54个字符。

但是,由于您的 Appendstring 函数错误地嵌入了 John 描述的空字节,因此字符串中有 4 个空字符。当您将空字符流式传输到 cout 时,它是不可打印的,并且不显示任何内容。

一旦您按照 John 的描述更改 Appendstring 函数,您就不需要将长度加 1 并且 for 循环应该是

for (int i=0; i<length; i++)
于 2013-05-03T17:36:09.730 回答