当我尝试编译使用gets()GCC函数的C代码时,
我明白了
警告:
(.text + 0x34):警告:`gets'函数很危险,不应该使用.
我记得这与堆栈保护和安全性有关,但我不确定为什么?
有人可以帮我删除这个警告并解释为什么会有这样的使用警告gets()?
如果gets()是如此危险,为什么我们不能删除它?
我正在使用Ubuntu,我也使用Geany和CodeBlock作为我的IDE.我正在尝试做的是读取一个字符串(如"Barack Obama")并将其放在一个变量中:
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
scanf("%s", name);
printf("Your Name is: %s", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Enter your name: Barack Obama
Your Name is: Barack
Run Code Online (Sandbox Code Playgroud)
如何让程序读取整个名称?
C中的"坏"功能是什么,它们的"好"选择是什么?
为什么坏的不好,是什么让好的更好?
我知道,例如,它gets()是"坏的",因为它没有任何形式的边界检查.什么是更好的选择?gets()?
我听说gets()很糟糕,但我不记得为什么.谁知道?什么是最好的选择?
还有更多吗?
用户输入的示例:
My name is James.
使用scanf,我必须打印整行,即My name is James.然后我必须得到这个输入字符串的长度并将其存储在一个int变量中.
#include <stdio.h>
int main(int argc, char* argv[]) {
char c;
scanf(" %c", &c);
printf("%c\n", c);
return 0;
}
[root@test]# ./scanf
a
a
[root@test]# ./scanf
h
h
Run Code Online (Sandbox Code Playgroud)
似乎总是匹配空间是否存在,为什么?
#include <stdio.h>
#define MAX 5
int stk[MAX];
int top=-1;
main()
{
char ch;
void push();
void pop();
void display();
do
{
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Display\n");
ch=getchar();
if(ch=='1')
push();
if(ch=='2')
pop();
if(ch=='3')
display();
printf("Do u want to continue y/n");
ch=getchar();
}while(ch=='y'||ch=='Y');
}
void push()
{
}
void pop()
{
}
void display()
{
}
Run Code Online (Sandbox Code Playgroud)
我完成推送操作的那一刻...程序打印""你想继续y/n"并退出....不等待用户输入""y/Y"
请帮忙
我需要一个 scanf() 调用来接受空格(没有制表符或换行符,只有' '空格字形)。
char buffer[2048];
scanf(" %2048[0-9a-zA-Z ]s", buffer);
Run Code Online (Sandbox Code Playgroud)
我从这个问题的答案中得到的这个格式说明符:
虽然它可以很好地接受第一个输入序列,但它会在第一个空白字符所在的位置终止,并带有一个空字符。这是怎么回事?我可能使用了错误的格式吗?
我应该说,我在这里使用 scanf() 是因为安全不是问题;我是唯一会使用这个特定程序的人,而且输入的格式是严格的。
嗨,我在使用这个简单的 C 代码时遇到了麻烦,因为我对它很陌生。
当我尝试从或获取空值时,如果用户只按 ENTER 而不输入任何内容。尝试了一些变化,但仍然无法正常工作
这段代码如下:
char user_input[17] = {'\0'};
printf("Type something: ");
prompt = scanf("%s", user_input);
if (prompt <= 0) {
printf("You didn't type anythingt!\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
还:
char user_input[17] = {'\0'};
printf("Type something: ");
scanf("%s", user_input);
if (user_input[0] == '\0') {
printf("You didn't type anything!\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这个论坛上有很多变化,没有一个对我有用......我错过了什么?
我正在尝试设置一个代码来计算整个字符串,并且在它找到的第一个空格后不会停止.我怎么做?
我试过这种代码,但它只计算第一个单词,然后显示第一个单词中的字母数.
到目前为止,这是我尝试过的.
int main(){
char get[100];
int i, space=0, len=0, tot;
scanf("%s", get);
for (i=0; get[i]!='\0'; i++)
{
if (get[i] == ' ')
space++;
else
len++;
}
tot = space + len;
printf("%i", tot);
}
Run Code Online (Sandbox Code Playgroud)
和
int main(){
char get[100];
int len;
scanf("%s", &get);
len = strlen(get);
printf("%i", len);
}
Run Code Online (Sandbox Code Playgroud)
但仍然会得到与第一个相同的答案.
我期待如果输入:狐狸很华丽.输出:19
但我得到的只是输入:狐狸很华丽.输出:3