相关疑难解决方法(0)

为什么获取功能如此危险以至于不应该使用它?

当我尝试编译使用gets()GCC函数的C代码时,

我明白了

警告:

(.text + 0x34):警告:`gets'函数很危险,不应该使用.

我记得这与堆栈保护和安全性有关,但我不确定为什么?

有人可以帮我删除这个警告并解释为什么会有这样的使用警告gets()?

如果gets()是如此危险,为什么我们不能删除它?

c gets fgets buffer-overflow

210
推荐指数
9
解决办法
14万
查看次数

为什么scanf("%d",[...])不消耗'\n'?而scanf("%c")呢?

在这里,我在接受的答案中看到了这个陈述:

大多数转换说明符都跳过前导空格,包括换行符但%c不跳过.

对我来说,不清楚这种不同行为的基本原理,我会期待一个统一的(例如总是跳过或从不).

我用这样的一段C代码遇到了这种问题:

#include "stdio.h"

int main(void){

    char ch;
    int actualNum;

    printf("Insert a number: ");
    scanf("%d", &actualNum);
    // getchar();

    printf("Insert a character: ");
    scanf("%c", &ch);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

交换两个scanf小号解决了问题,以及在(注释)getchar,否则'\n'该第一插入将由所述第二消耗scanf与%c.我在linux和windows上测试了gcc,行为是一样的:

gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2)
版权所有(C)2012 Free Software Foundation,Inc.
这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.

所以我的问题是:为什么%d和%c行为不同WRT '\n'的scanf?

c scanf format-specifiers

10
推荐指数
2
解决办法
4172
查看次数

C%[]转换说明符和字符串函数

我很难编写理解说明符和字符串函数的格式.

我的目的是用来%[]读取所有字符和空格,然后使用strcpy函数,然后使用strcat函数.

到目前为止,我已经设法输入单个字符并打印出来,不包括空格.

这是迄今为止的代码;

int main(int argc, char** argv)  {
    char words[30];
    int loops;
    printf("How many letters would you like to enter? - ");
    scanf("%d",&loops);
    for(int i=0;i<loops;i++){
      printf("Provide some text as input:");
      scanf("%s", &words[i]);
    }
    printf("%d", strlen(words));

    printf("%s",&words);
    return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
1569
查看次数

使用以下C代码输出错误

#include <stdio.h>

int main(){
    int l,m,q,j;
    char option;
    scanf("%d",&q);
    printf("%d\n",q);
    for(j=0;j<q;j++){
        scanf("%c %d %d",&option,&l,&m);
        printf("%c %d %d",option,l,m);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

3(Input)
3
C 1 4(Input)

 0 -374066224C 1 4
Run Code Online (Sandbox Code Playgroud)

上面的代码有什么问题?它没有给出预期的输出.

c scanf

-3
推荐指数
1
解决办法
127
查看次数

标签 统计

c ×4

scanf ×2

buffer-overflow ×1

fgets ×1

format-specifiers ×1

gets ×1