下面c语言程序求指正,最好解释下strcat函数,谢谢!!!

下面c语言程序求指正,最好解释下strcat函数,谢谢!!!,第1张

int main()
{
char a[11]="china",b[5]="good";
strcat(a,b);
printf("%s\n",a);
return 0;
}
strcat的作用是将t字符串连接到s的字符串的末尾。
这就要求,s字符串要有足够的空间来存放两个字符串连接后的所需要的空间。
因此,a这里的空间要大一些。

原型:char strcat(char dest,char src);

用法:#include <stringh>

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针
当然是遇到字符串结束符'\0'

strcpy(char
,
char
)函数表示将第二个参数开始的字符串拷贝到第一个参数的字符串位置。故strcpy
(a+1,
b+2)
表示将b[2]开始的字符串复制到a[1]开始的字符串中,即a数组变为“a2”。
strcat(char
,
char
)函数表示将第二个参数开始的字符串接到第一个参数开始的字符串上,返回第一个字符串的指针。故strcat(a,c+1)表示将c[1]开始的字符串接到“a2”后面,a数组变成“a2yz”。
最后用puts输出字符串。
不懂请追问,望采纳。

有二个方法可以实现:

方法一:直接用strcat函数 ;

方法二:编程实现strcat的功能 ;

参考代码如下:

void main() 
{ char s1[80],s2[80]; 
int i=0,j=0; 
puts("input two strings:"); 
gets(s1); 
gets(s2); 
while(s1[i]!='\0') i++; 
while(s2[j])!='\0')
s1[i++]=s2[j++];/此处本人修改/
printf("result:%s\n",s1); 
}

对于strcat,其格式为

char strcat(char a, char b);

其功能为,将字符串b拼接到a的尾部,并将结果字符串返回。

所以,实现该函数的思路为:

1 找到字符串a的结尾;

2 将b的所有字符复制到a尾部的空间中,到\0为止。

需要注意的是,复制的结果要包含b的结束符。

代码如下:

char strcat(char a, char b)
{
    char p = a;
    while(p) p ++;
    //当p为\0时退出,即查找到a的结尾。
    do
    {
        p++ = b;//将b中的每个字符复制到p中。
        if(b == '\0')break;//遇到结束符退出。
        b++;//移动指针b的位置。
    }while(1);
    
    return a;//返回结果字符串首地址。
}

strcpy()是字符串复制函数。连字符串的结束标志‘\0’一同复制。
对于strcpy(a+1,b+2);中的b+2则是数组里的“h\0”的首地址。
a+1则是数组里的“bcde”的首地址。
即此函数的意义是:把“h\0”复制到“bcde”的位置。字符串遇到‘\0’结束
即结果是:ah。
对于strcat(s[0],s[1]);中的二为数组可以看成是多个一维数组组成的。所以 s[0]代表的是“a”的首地址,s[1]代表的是“good”的首地址。这是字符串连接函数。即把good放到了a的后面。
结果是:agood。

1)简单来,直接用
strcat
函数,需要包含头文件
stringh
2)自己实现的话也不麻烦,但是要考虑一些细节:
假设两个字符串指针为
str1,str2
,现在要讲
str1

str2
连接成一个新的字符串。
a考虑指针
str1,str2
是否非空
b如果将str2的内容直接连接到str1的末尾,要考虑str1是否有足够的剩余空间来放置连接上的str2的内容。
如果用一个新的内存空间来保存str1和str2的连接结果,需要动态分配内存空间。

char s="abcd";
s指针指向的内存是固定的。也即是s指向的内存也只够装下"abcd"
而你现在却要在这块内存里面添加进"efg"这怎么可以呢?
你可以动态申请一块内存的。比如
chars = (char)malloc(sizeof(char)100);


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13399506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存