我试图创建我的函数版本gets()并puts()了解它们.我正确编写的程序显示字符串,但也显示一些垃圾字符.
为什么会这样?
/* xgets and xputs function */
/*Author : Swapnil Jain */
#include<stdio.h>
void xgets(char *);
void xputs(char *);
int main()
{
char str[25];
xgets(str);
printf("\n");
xputs(str);
return 0;
}
void xgets(char *a)
{
printf("Enter string\n");
while(1)
{
scanf("%c",a);
if(*a != '\n')
a++;
else
break;
}
a = '\0';
}
void xputs(char *a)
{
while(1)
{
printf("%c",*a);
if(*a != '\0')
a++;
else
break;
}
}
Run Code Online (Sandbox Code Playgroud)
输入字符串:
Hello how are you
Run Code Online (Sandbox Code Playgroud)
输出字符串:
Hello how are you
D?
Run Code Online (Sandbox Code Playgroud)
你快到了.这似乎是尝试null终止输入,只有这个特定的表达式在结尾处xgets()没有任何效果
a = '\0';
Run Code Online (Sandbox Code Playgroud)
它将a指针本身的值设置为0.
只需*在前面添加一个a将指向的字符设置a为0:
*a = '\0';
Run Code Online (Sandbox Code Playgroud)
⚠ 注意:您的代码容易受到缓冲区溢出的影响,因为str其长度固定为25,未签入xgets.你应该传递str第二个参数的长度xgets并在那里检查它.