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

为什么这个C程序不能正常工作?,c,C,我试图创建自己版本的函数get()和put(),以了解它们。我编写的程序正确地显示了字符串,但也显示了一些垃圾字符 为什么会发生这种情况 /* 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"); xp

我试图创建自己版本的函数
get()
put()
,以了解它们。我编写的程序正确地显示了字符串,但也显示了一些垃圾字符

为什么会发生这种情况

/* 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;
 }
}
输出字符串:

Hello how are you
Hello how are you
D�

最好总是用空字符初始化字符数组的所有位置,空字符等于下面的0行

  char str[25];
  memset(str, 0, sizeof(str);
还要更正下面的代码行:-

 a = '\0';  to *a = '\0';

这将解决您的问题。

最好始终使用空字符初始化字符数组的所有位置,空字符相当于下面的0行

  char str[25];
  memset(str, 0, sizeof(str);
还要更正下面的代码行:-

 a = '\0';  to *a = '\0';

这将解决您的问题。

您就快到了。这似乎是试图以null终止输入,只有
xget()结尾的这个特定表达式无效

    a = '\0';
它将
指针本身的值设置为0

只需在
a
前面添加一个
*
,即可将
a
指向的字符设置为0:

    *a = '\0';


⚠ 注意:您的代码容易发生缓冲区溢出,因为
str
的固定长度为25,而在
xget
中未选中该长度。您应该将
str
的长度作为第二个参数传递给
xget
,并在那里进行检查。

您就快到了。这似乎是试图以null终止输入,只有
xget()结尾的这个特定表达式无效

    a = '\0';
它将
指针本身的值设置为0

只需在
a
前面添加一个
*
,即可将
a
指向的字符设置为0:

    *a = '\0';


⚠ 注意:您的代码容易发生缓冲区溢出,因为
str
的固定长度为25,而在
xget
中未选中该长度。您应该将
str
的长度作为第二个参数传递给
xget
,并在那里进行检查。

显示输入字符串和垃圾显示输入字符串和垃圾