char* strcat(char* str1,char* str2)
{
char* p = str1; //为什么要定义的*p来使用 为什么不用str1
while (*p!='\0')
p++;
while (*str2!='\0')
{
*p = *str2;
p++;
str2++;
}
*p = '\0';
return str1;
}
因为p要改变指针,最后p指向\0了,你return p能行吗
除非这函数不要返回值了,那你就随便改str1
以下答案引用自GPT-3大模型,请合理使用:
说明
char *strcat(char *str1,char *str2)
{
char* p = str1; //为什么要定义的*p来使用 为什么不用str1
while (*p!='\0')
p++;
while (*str2!='\0')
{
*p = *str2;
p++;
str2++;
}
*p = '\0';
return str1;
}
strcat的作用是把str1和str2连接起来,并返回str1。由于str1和str2都是char*类型的变量,所以在连接的时候会将变量p的值从str1复制到str2,然后再将str2的值复制回str1。这样做的目的是为了避免两个变量之间的重复修改。
如果我的回答解决了您的问题,请采纳我的回答
供参考:
#include <stdio.h>
#include <assert.h>
char* strcpy(char* des, const char* source)
{
char* r = des;
assert((des != NULL) && (source != NULL));
while ((*r++ = *source++) != '\0');
return des;
}
char* strcat(char* str1, char* str2)
{
char* p = str1; //定义的指针 p 指向字符串 str1 首地址
while (*p != '\0') p++; //通过循环,让指针 p 移动到 str1 字符串的末尾字符'\0'处
while (*str2 != '\0') *p++ = *str2++; // 将字符串 str2 首地址开始的字符复制到 str1 的末尾
//即指针 p 指向的位置, 一个一个复制,直到 str2 末尾处。
*p = '\0'; // 在指针 p 指向的末尾处加上字符串结束标志 '\0'
return str1; // 函数需要返回的是 str1 字符串的首地址,str1 的指向是始终无变化的。
}
该回答引用ChatGPT
这段代码实现了字符串的拼接,但是它没有考虑内存的分配问题。如果str1的内存空间不足以存储str1和str2的内容,那么就会发生缓冲区溢出。
为了避免这个问题,我们可以先在代码中判断str1的内存空间是否足够,然后动态分配内存空间。另外,这段代码中的strcat函数的签名不符合标准的strcat函数的签名,因为标准的strcat函数的第二个参数是常量字符串,而不是字符串变量。
楼上总结的非常好,建议LZ 采纳