您现在的位置是:首页 >

将下列作品作者及主要人物连线 写一个函式,将两个字串连线起来

火烧 2022-10-12 19:01:32 1082
写一个函式,将两个字串连线起来 写一个函式,将两个字串连线起来for j = 0 [j] != '' j++, i++ 这行末尾的分号要删掉将两个字串连线起来。 trcat的原型为exter char

写一个函式,将两个字串连线起来  

写一个函式,将两个字串连线起来

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

输入两个字串,不用stract函式将两个字串连线起来并输出

#include "stdio.h"#include "string.h"int main(){ int n,i,j; char a[100],[100]; printf("输入字串a:n"); gets(a); getchar(); printf("输入字串a:n"); gets(b); n=strlen(a); for(i=n,j=0;i<strlen(b)+n,j<strlen(b);i++,j++) { a[i]==b[j]; } puts(a); return 0;}

将两个字串连线起来 不要用strcat 函式

#include "stdio.h"int main(void){ char str1[50]="1234567890",*str2="abcdefg",i=0; while(str1[i]) i++; while(str1[i++]=*str2++); printf("concatenate string=%sn",str1); return 0;}

  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码