将下列作品作者及主要人物连线 写一个函式,将两个字串连线起来
写一个函式,将两个字串连线起来
写一个函式,将两个字串连线起来
for (j = 0; b[j] != ''; j++, i++);这行末尾的分号要删掉
将两个字串连线起来。
strcat的原型为
extern char *strcat(char *dest,char *src);
src和dest所指记忆体区域不可以重叠且dest必须有足够的空间来容纳src的字串。
而你这段程式码有两个问题:
1.你没有包含
#include <string.h>
在C++中,则存在于<cstring>标头档案中。
2.a的记忆体空间不足以容纳b,最后执行会出现段错误。
修改如下
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char a[7]="ddd";
char b[]="eee";
printf("%sn",strcat(a,b));
return 0;
}
1.contact函式有返回值型别却没有return返回值
2.contact函式返回值不应该是char型别的,分清楚char和char*
3.c[40]=contact(a,b);阵列不可这样赋值,要么回圈要么改用指标
4.这里建议你函式引数及变数改用指标
5. z[40]=strcat(x,y);这样赋值不可以
编写一个程式,将两个字串连线起来,不用strcat函式。
我觉得你应该先描述一下你为什么认为会有 j=j+1......
首先我猜,可能是逻辑没理清。
首先要明白,在第二个 wile 语句执行前,i 其实是处于字串最末尾的''位置,而 j 是等于 0。
而每个字串末尾的''就是用来标识一个字串结束的,所以拼接字串其实就是从串 1 的末尾''位置开始讲串 2 的内容全部一个一个的贴上过去(覆蓋''),然后在最后的末尾在新增一个 ''用以标识串的结束。
---
但是我又猜,万一是不明白自增、自减的含义呢?
s1[i++]=s2[j++];i++、j++ 意思是在语句结束后,各自加一。
所以
s1[i++]=s2[j++];等同于:
s1[i]=s2[j];i += 1;j += 1;不过上面不是严格的等同,但是日常等同过去没问题,原理就涉及到汇编了。
---
最后我又想,也许楼主都会,只是因为程式码十分的不友好,看走眼了呢?
所以我又放上增加了一点可读性(加了花括号)的原始码:
#include <stdio.h>int main(){ char s1[80],s2[40]; int i=0,j=0; printf("input string1:"); scanf("%s",s1); printf("input string2:"); scanf("%s",s2); while (s1[i]!='') { i++; } while(s2[j]!='') { s1[i++]=s2[j++]; } s1[i]=''; printf("nThe new string is:%sn",s1); return 0;}最后的最后,怎么提问实在是一门精妙的艺术。
编写一个C++程式,将两个字串连线起来,不用strcat函式
完整原始码
#include<stdio.h>
void main()
{char s1[80],s2[40];
int i=0,j=0;
printf("ninput string1:");
scanf("%s",s1);
printf("input string2:");
scanf("%s",s2);
while(s1[i]!='')
i++;
while(s2[j]!='')
s1[i++]=s2[j++];
s1[i]='';
printf("The new string is:%sn",s1);
}
将两个字串连线起来组成一个字串时,选用___函式
是c语言吗 c语言用strcat(char *dest,char *src)
把src所指字串新增到dest结尾处(覆蓋dest结尾处的'')并新增''

错哪儿了???用STRACT函式将两个字串连线起来
你这段程式有二个概念性错误 (1)没有分清字串和字元阵列的区别: char* a=abcde;定义的是个字串,它是一个占用了6个位元组的字串,其中前面5个储存:abcde,最后一个是(编译器自动加的);char str1[80]=This is a 定义了一个字元阵列,可以储存80个字元,编译器不会加;你需要在后面手工加上; (2)没有分清函式定义和呼叫函式的区别: char *stract(str1,str2);这是定义了一个函式,这个函式的名称和系统的函式名称strcat刚好一样,不是呼叫函式;这个函式需要你自己去实现,你这里没有实现; stract(str1,str2)是呼叫函式strcat,编译器会按照你定义的标头档案顺序去找; 由于你定义了str1和str2长度为80,因此后面的储存区均是0,因此,显示结果没有问题,如果你将str2长度定义为9个(你的后面字串的长度,你就会发先第一个显示结果会降str1也打印出来,原因是你没有给str2加上;建议你注意这个问题,这就是臭名昭著的缓冲区溢位漏洞的来源之一。你由于仅仅是定义了strcat函式,因此你的输出仍然是str1