在c中收到警告信息

时间:2016-09-22 15:54:38

标签: c fgets gets

我正在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。我可能不得不以这种或那种方式冲洗它。

1 个答案:

答案 0 :(得分:-2)

我理解的问题是给你一种用空格读取字符串的方法。但是你不想使用fgets()因为某些原因我没有遵循。这是另一种方法。

scanf ("%[^\n]%*c", str);