此程序用于读取字符串并显示字符串,但由于某种原因它不会打印出任何内容。
使用指针和数组打印字符串和读取字符串的函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void read_string ( char s[]);
void display_string(char s1[]);
int main()
{//begin main
char string1[100];
do
{
read_string(string1);
puts("the string entered is \n");
display_string(string1);
} while(string1[0]);
return 0;
}//end main
void read_string ( char *s)
{
int i;
char c;
for( i = 0;(c = getchar())!= '\n' ; i++)
s[i] = c;
s[i] = NULL;
}
void display_string(char *s1)
{
int i;
char c;
for (i =0; s1[i]; i++)
{
s1[i] = c;
putchar(s1[i]);
}
putchar('\n');
}
答案 0 :(得分:3)
display_string方法用c覆盖字符串(未初始化)
删除它使其有效。
void display_string(char *s1)
{
int i;
for (i =0; s1[i]; i++)
{
putchar(s1[i]);
}
putchar('\n');
}
答案 1 :(得分:1)
删除函数s1[i] = c;
中的行display_string()
,它没有任何用处。
同样为char分配NULL值是不正确的。要终止数组,只需输入s[i] = 0;
答案 2 :(得分:1)
看起来你的display_string函数需要一些工作。你正在覆盖字符串的内容而不是打印它。可能值得了解如何启用更多编译器警告。您有一个明显的错误,编译器应该能够为您诊断。
答案 3 :(得分:1)
void display_string(char *s1)
{
int i;
char c;
for (i =0; s1[i]; i++)
{
s1[i] = c;
putchar(s1[i]);
}
putchar('\n');
}
在这个函数中,你用一些未定义的c值覆盖你的字符串字符,然后尝试打印出来。你应该做的就是打印出来。
另外,你的代码很难阅读,因为你的聪明才智?超过可读性这是非常非常糟糕的习惯。我的意思是while(string1[0]);
等。如果你使用这样的东西 - 至少要评论它。我非常怀疑你会记住这意味着如果你必须在一个月,一年甚至更长时间内回到你的代码来改变一些事情。
答案 4 :(得分:0)
其他人回答了您要求的问题,但您的read_string
存在一些缺陷:
首先,该函数不知道缓冲区有多大,它需要一个额外的参数:
void read_string(char *s, size_t length);
- 这意味着您应该将i
的声明更改为
size_t i;
- 此函数需要检查s
指向的缓冲区是否溢出,如:
for(i=0; i<size-1 && ( c=getchar() )!='\n'; ++i) /* ... */
getchar
也可能会返回EOF
,这可能无法表示为char
(如果您的平台上已签署char
,这甚至可能会引入未定义的行为),所以你应该将你的声明改为
int c;
并检查EOF
,例如:
for(i=0; i<size-1 && ( c=getchar() )!=EOF && c!='\n'; ++i) /* ... */
和,(我不确定这是否符合标准,至少,这是令人恼火的):
s[i] = NULL;
应改为
s[i] = 0; // or '\0', if you prefer
你这里没有使用0指针。
HTH