我正在C中做一个学校项目,我必须创建一个获取字符串输入的函数并将字符串作为输出反转。我可以使用scanf("%s", answer);
,但这只存储字符串的第一个单词。因此我决定选择gets(answer)
。我知道这是不安全的,因为它没有在answer
中分配特定的内存大小,但我在定义数组时已经这样做了:char answer[100];
我对使用fgets
不感兴趣,因为老师会使用Cygwin编译,这个警告通常只会在使用Mac时显示在终端上:
warning: this program uses gets(), which is unsafe.
在提示用户输入字符串之前,它会在终端中显示。我遇到的另一个问题是,gets(answer)
有时会从其上方的printf("Type a string: ")
获取输入。有什么方法可以避免这种情况吗?
源代码:
#include <stdio.h>
#include <string.h>
void reverseString();
int main() {
char str[100];
printf("Type your string here: ");
gets(str); /* Catching return from prinf so add one extra */
gets(str);
reverseString(str);
}
void reverseString(char string[]) {
char temp;
int startChar = 0;
int endChar = strlen(string) - 1;
while (startChar < endChar) {
temp = string[startChar];
string[startChar] = string[endChar];
string[endChar] = temp;
startChar++;
endChar--;
}
printf("\nReverse string is: %s\n", string);
}
运行代码:
warning: this program uses gets(), which is unsafe.
Type your string here: hello world
Reverse string is: dlrow olleh
编辑:
所以我尝试使用fgets(str, sizeof(str), stdin)
,但它仍然会跳过用户输入部分。我还为str
定义了一个缓冲区大小:#define BUFFER_SIZE 100
并将其添加到数组char str[BUFFER_SIZE]
。
编辑:
fgets(str, sizeof(str), stdin)
无效的原因,是因为它从\n
抓取stdin
。我可能不得不以这种或那种方式冲洗它。
答案 0 :(得分:-2)
我理解的问题是给你一种用空格读取字符串的方法。但是你不想使用fgets()因为某些原因我没有遵循。这是另一种方法。
scanf ("%[^\n]%*c", str);