为什么这个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
,并在那里进行检查。显示输入字符串和垃圾显示输入字符串和垃圾