求助 关于指针
#include <stdio.h>#include <string.h>
#define MAX 128
int main()
{
char str1;
char str2;
char *p1, *p2;
int num1,num2;
printf("请输入第一个字符串:");
fgets(str1,MAX,stdin);
printf("请输入第二个字符串:");
fgets(str2,MAX,stdin);
p1 = str1;
p2 = str2;
num1 = strlen(p2);
num2 = strlen(p1);
// p1 = p1 + num2;
strncat(str1,str2,num2);
printf("%s\n",p1);
return 0;
}
最后无法将两个输入的字符串连接起来,会有一个换行符号,这个应该怎么解决
这是输出的结果
请输入第一个字符串:www.
请输入第二个字符串:fishc
www.
fishc
本帖最后由 major_lyu 于 2020-3-6 21:24 编辑
fgets在读入字符串时不会忽略回车符。所以你用fgets读入的str1和str2末尾都是有一个回车的。
实际上你这个拼接已经完成了。
你想去掉str1后面的的回车的话,可以在拼接前强制将最后一个回车符换成‘'\0';
在strncat()那一句之前加上。
*(p1+num2-1) = '\0';
或者用scanf("%s“)读入字符串,这样会自动忽略末尾的回车。
另外,你这strncat第三个参数似乎不对吧,应该是需要拷贝到目标字符串的长度,要将第二个字符串全部续借到第一个字符串,第三个参数应该是第二个字符串的长度。
你这num1是第二个字符串的长度,num2是第一个字符串的长度。 fgets 函数最多可以读取 size - 1 个字符,因为结尾处会自动添加一个字符串结束符 '\0'。当读取到换行符('\n')或文件结束符(EOF)时,表示结束读取('\n' 会被作为一个合法的字符读取)
所以输出的时候会分行。
我上传的这段代码也有缺陷,测试了好长时间,要想输出完整的连接后的句子需要在第一个句子后面后面追加空格。
#include <stdio.h>
#include <string.h>
#define MAX 128
int main()
{
char str1;
char str2;
char *p1, *p2;
int num1,num2;
printf("请输入第一个字符串:");
fgets(str1,MAX,stdin);
printf("请输入第二个字符串:");
fgets(str2,MAX,stdin);
p1 = str1;
p2 = str2;
num1 = strlen(p1);
num2 = strlen(p2);
str1='\b';
strncat(str1,str2,num2);
printf("%s\n",str1);
return 0;
}
百度来的一些资料:fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。
问题出在有时字符串的结尾处可能多出一个换行符,我们需要把它去掉。
https://xxx.ilovefishc.com/forum/202003/06/153706an7doy2gine8ia8d.png.thumb.jpg
查看汇编代码也会发现多了一个0xA,这个对应的ascii码就是换行符,所以要去掉
我的解法直接用指针处理下得了
int main()
{
char str1;
char str2;
char *p1, *p2;
int num1, num2,i;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
p1 = str1;
p2 = str2;
num1 = strlen(p1);
num2 = strlen(p2);
/*
num1 = strlen(p2);
num2 = strlen(p1);
// p1 = p1 + num2;
strncat(str1, str2, num2);
*/
for ( i = 0; i < num2-1; i++) {
*(p1 + num1 - 1 + i) = *(p2 + i);
printf("%c\n", *(p2 + i));
}
*(p1 + num1 - 1 + i) = '\0';
printf("%s\n", p1);
return 0;
}
页:
[1]