C语言strcat的问题

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

int main(){
char str1[]="china ";
char str2[]="is good\n";
int *p=strcat(str1,str2);
//puts(str3);
system("PAUSE");
return 0;
}

//我要是理解 把strcat返回值 赋值到char[] 是因为char[] 的变量名其实就是第一个字符的地址,然后 strcat返回的也是地址. 这样对吗?

如上代码我想用*p 给数组弄出来 能办到吗?为什么?

不对。
strcat(dst,src)是把src字符串粘在dst字符串后面,但是上面str1的空间不够存放str1+str2的内容。

int main(){
char str1[64]="china ";
char str2[]="is good\n";
strcat(str1,str2);
printf("%s\n",str1);
system("PAUSE");
return 0;
}追问

#include
#include
#include

int main(){
char str1[]="china ";
char str2[]="is good\n";
char *p=strcat(str1,str2);
while(*p!='\0'){
putchar(*(p++));
}
system("PAUSE");
return 0;
}
实验证明,可以办到
帮我分析下原因好吗?

追答

因为char * strcat ( char * destination, const char * source );的返回值为destination。所以你这样做是对的。注意strcat要求目的字符串长度足够。

参考资料:http://www.cplusplus.com/reference/clibrary/cstring/strcat/

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-13
LS说的很对,就算你能运行,也是隐含错误的,我用VC6.0能编译,运行的时候出错。
这个str1[] ="china"运行有没错误取决于编译器究竟给没指定大小的str分配了多少的空间,够用的话运行不会有错误,但是你去试试把str2改的相当长,应该就会出问题了。暂时没错误不代表真的没错误。
第2个回答  2011-05-13
可以么。我在vs 2005中运行崩溃了,明显的内存非法访问。
第3个回答  2011-05-13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
char str1[20]="china ";
char str2[20]="is good\n";
char *p = strcat(str1,str2);

puts(p);
system("PAUSE");
return 0;
}
第4个回答  2011-05-14
修改下函数体里面的代码
数组定义长度后不能在改变大小,用strcat也是新定义了一个足够大的数组,连接起来后又把数组名该了过来,
int i=0,j=0;
char strm[50];

// while(str1[i]!='\0')strm[i]=str1[i];
for(i=0;i<str1.length;i++){
strm[i]=str1[i];
}

//while(str2[j]!='\0')
for(j=0;j<str2.length;j++)
{strm[j+i]=str2[j];

}
strm[j+i]='\0';
return strm;

请教:linuxcstrcat拼接多次字符串就崩溃?c语言专家能指
Linux环境下c语言中的cstrcat函数拼接多次字符串时出现崩溃现象,原因可能有二。首先,变量未在函数的开头定义,导致在某些系统如Linux中可能出现segmentaion fault错误。其次,strcat函数容易引发缓冲区溢出,引发异常。为避免此类问题,现代库及操作系统提供保护机制,限制串接字符串的长度,如Visual Studio新...

C语言 strcat 问题
1.不对,这是把字符数组a中从第二个字符开始,所有字符都添加到字符串数组b的第二个串 2.也不对,strcat的两个参数必须是char*类型,使用char类型参数是错误的 另外,strcat括号里面的char多余,必须去掉 建议:如果需要将单个字符添加到指定字符串后面,建议你先使用strlen获取字符串长度,存入变量中,...

关于C语言strcat函数的问题?
s1数组在内存中占6个字节,hello字符5个还有一个结束符\\0;接下来存放的是指针s2,共4个字节。执行strcat(s1, s2);world中的w放在了原来s1字符串的\\0位置,然后剩下的orld四个字符刚好覆盖了s2内存的4个字节,所以s2的内容已经改变。这一点可以在%p输出s2中看出。64是d的ASCII码,6c是l的ASCII...

关于strcat函数
在C语言中,字符串以'\\0'(ASCII码为0)作为终止符。当你使用strcat(str1, str2)时,即使str1的末尾有多个'\\0',函数也会忽略它们,确保连接后的字符串只有一个有效的结束符。例如,如果strA是"abcd\\0",strB是"ABC\\0",strcat后的结果将是"abcdABC\\0",即使strA有额外的'\\0'。同样,如果...

C语言strcat(a,c),字符串a的长度明显不够,为啥不出错?
因为strcat函数是不安全的。虽然数组a的长度是4,但将c连接到a的后面时,不会进行越界检查,而是直接将c追加到a的后面。这样,就会占用不属于a的内存,所以运行程序时可能出现多种情况,比如:1.程序奔溃 2.表现正常 3.没奔溃,但程序出现莫名其妙的现象 这3种可能都有可能出现,出现2实属侥幸,说...

C语言 strlen()函数的问题
你这个代码是有问题的,使用strcat的时候,第一个字符串的存储空间必须足够大,能放下第一个字符串和第二个字符串加起来的长度,注意这一点。你的问题 第一个 : str1末尾的‘\\0’不会被保留 第二个问题 : 合并后str1的最末尾会有'\\0'的存在,字符串结束标志,...

请问C语言中strcat是什么意思?
在这段代码中,出现了语法错误,提示变量<strcat>未定义。这是因为在Pascal中,没有名为<strcat>的函数或变量。根据代码的结构,可能是想要使用字符串拼接函数的功能,应该使用Pascal中的StrUtils单元中的Concat函数,而不是C语言中的strcat函数。因此,将代码中的STRCAT替换为Concat函数即可,示例如下:uses...

c语言中strcat,strcpy等函数的问题
strcpy()'复制内容到一个字符串,会覆盖原字符串内容。strcat();连接函数,连接两个字符串。值被覆盖式由于strpy引起的,相应的更改代码顺序。

C语言自编strcat函数输出乱码
你要把b接到a后面。a必须大小足够容纳2个字符串。内部函数strcat,也要求大小。除非你传递的a数组是动态申请的,然后strcat里用realloc从定义大小。那样才不需要预设较大内存空间。

c语言strcat函数怎么用
C语言strcat函数的使用方法 一、函数概述 strcat函数是C语言中用于字符串拼接的函数。它可以将一个字符串拼接到另一个字符串的末尾,并返回目标的指针。二、函数原型 strcat的函数原型为:char *strcat; 其中,dest是目标字符串,src是源字符串。三、使用步骤 1. 声明字符串变量并初始化目标字符串。例...

相似回答