关于实现 strcat 字符串拼接的问题
本帖最后由 yexing 于 2020-4-1 23:05 编辑课后作业原题:
S1E22:指针和数组 | 课后测试题及答案
连接字符串 —— strcat 和 strncat 函数
使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来。
我的代码:
#include <stdio.h>
#define MAX 1024
int main()
{
int i, j, k;
char str1;
char str2;
char str3;
char *pstr1 = str1;
char *pstr2 = str2;
char *pstr3 = str3;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
for (i = 0; *(pstr1+i) != '\0'; i++){;} //这个循环就是想获得 str1 的长度并存储到 i
//*(pstr1+i) = ''; //想去掉'\0',但是报错
//*(pstr1+i-1) = ''; //想去掉换行符,但是这两行报错,也求助一下大神该怎么解决
for (j = 0; j < i; j++)
{
*(pstr3+j) = *(pstr1+j);
}
for (j = i-1, k = 0; *(pstr2+k) != '\0'; j++, k++)
{
*(pstr3+j) = *(pstr2+k);
}
*(pstr3+j) = '\0';
printf("连接后的结果是:%s", str3);
return 0;
}
运行结果:
请输入第一个字符串:ilove
请输入第二个字符串:fishc.com
连接后的结果是:ilovefishc.com
最后多出来几个H是怎么回事?(已解决)
还有一个问题,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉? 本帖最后由 yexing 于 2020-4-1 22:46 编辑
我知道了,忘了给 str3 加' \0' 了(捂脸),已修改代码
不过还是想问一下,如果想去掉字符数组最后的换行符和 '\0' ,应该如何去掉? yexing 发表于 2020-4-1 22:45
我知道了,忘了给 str3 加' \0' 了(捂脸),已修改代码
不过还是想问一下,如果想去掉字符数组最后的换行 ...
“去掉” 指的是什么?
人造人 发表于 2020-4-1 23:39
“去掉” 指的是什么?
我的意思是转换为空元素,也就是未初始化,不知道可不可行 我也刚做了这道题
我是思路是先找到第一个数组中的\0第一个数组最开始初始化为\0
然后把要拼接的数组从找到的\0处开始赋值
下面是只把第二个数组前LIM个字符接到第一个数组后面第一个数组大小是n
char * mystrncpy(char * st1, char * st2, int n)
{
int m, i = 0, j = 0;
while (st1 != '\0')
i++;
if (st2 && i < n)
{
while (st2 != '\n' && st2 != '\0')
j++;
if (st2 == '\n')
st2 = '\0';
j = LIM < j ? LIM : j;
for (m = 0; m < j && i < n; m++, i++)
st1 = st2;
}
if (i >= n)
{
st1 = '\0';
printf("内容已满\n");
}
return st1;
} yexing 发表于 2020-4-2 08:00
我的意思是转换为空元素,也就是未初始化,不知道可不可行
不行,必须要有一个值
人造人 发表于 2020-4-2 12:56
不行,必须要有一个值
明白了,谢谢
页:
[1]