为什么这个C程序不能正常工作?

Swa*_*ain 0 c

我试图创建我的函数版本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)

rus*_*tyx 5

你快到了.这似乎是尝试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并在那里检查它.