标签:
#include <iostream> using namespace std; int main(int argc, char* argv[]) { char* str1 = "hello"; char* str2 = "china"; char* str3 = NULL; str3 = new char[strlen(str1) + strlen(str2) + 1]; str3[0] = '\n'; strcat(str3,str1); strcat(str3,str2); cout<<str3<<endl; return 0; }
上面的程序代码有什么问题?输出什么?
答案:str3指向的堆内存没有初始化,不含有字符串结束符号。输出随机值
strcat函数 strcat(char* dest, const char* src)
把字符串src加到dest字符串之后,dest字符串结束的位置就是新连接的src的位置。
<pre name="code" class="cpp">str3 = new char[strlen(str1) + strlen(str2) + 1];new申请的内存并没有被初始化,内存中的值都是随机数。调用strcat不能把str1的内容复制呆内存块当中,并且会导致数组越界。
应该把 str3[0] = '\0';
#include <iostream> using namespace std; int main(int argc, char* argv[]) {<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>char* str1 = "hello"; <span style="white-space:pre"> </span>char* str2 = "china"; <span style="white-space:pre"> </span>char* str3 = NULL; <span style="white-space:pre"> </span>str3 = new char[strlen(str1) + strlen(str2) + 1]; <span style="white-space:pre"> </span>str3[0] = '\0'; <span style="white-space:pre"> </span>strcat(str3,str1); <span style="white-space:pre"> </span>strcat(str3,str2); <span style="white-space:pre"> </span>cout<<str3<<endl; <span style="white-space:pre"> </span>return 0; }
hellochina
标签:
原文地址:http://blog.csdn.net/djb100316878/article/details/44903343