【发布时间】:2011-11-16 14:03:20
【问题描述】:
我试图在 c 中向后打印我的字符串,但我似乎无法让它与空格一起使用。我知道如果在 scanf 函数中最后一个返回的字符之后有任何空格,它将终止,因为没有现有的字符可以从输入的字符串中扫描。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLETTERS 20
void readStringBackwards();
main()
{
readStringBackwards();
}
void readStringBackwards()
{
printf("Please enter a string of up to 20 characters in length:\n ");
char str[20];
scanf("%s", str);
int i;
int stringlength = strlen(str);
if (stringlength > MAXLETTERS)
{
printf("The string length is too long!");
}
else
{
for( i = stringlength-1; i >= 0; i--){
printf("%c ", str[i]);
}
}
}
基本上该程序应该接受最多 20 个字符,并向后打印字符串。我一直在搜索有关 scanf 及其工作原理的信息,但很难找到直接的答案。任何提示表示赞赏。现在我得到的只是我反向输入的第一个单词。空格后面的其他字符被跳过,不存储在数组中。
【问题讨论】:
-
如果用户输入 > MAXLETTERS 那么你只是有一个缓冲区溢出。你不能可靠地调用 strlen 来确定他们是否这样做,已经太晚了。