相关疑难解决方法(0)

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

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

我明白了

警告:

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

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

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

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

c gets fgets buffer-overflow

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

从fgets()输入中删除尾随换行符

我试图从用户那里获取一些数据并将其发送到gcc中的另一个函数.代码是这样的.

printf("Enter your Name: ");
if (!(fgets(Name, sizeof Name, stdin) != NULL)) {
    fprintf(stderr, "Error reading Name.\n");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现它最后有一个换行符\n.所以,如果我输入John它最终发送John\n.如何删除它\n并发送正确的字符串.

c string gcc newline fgets

210
推荐指数
5
解决办法
30万
查看次数

比较C中的两个字符串?

由于未进行比较,此代码无效.为什么?

所有的名字都过去了if.

printf("Enter Product: \n");
scanf("%s", &nameIt2);
printf("Enter Description: \n");
scanf("%s", &descriptionI);
printf("Enter Quantity: \n");
scanf("%d", &qtyI);
printf("Enter Order Quantity: \n");
scanf("%s", &ordqtyI);

while (fscanf(fp4, "%s %s %d %s\n", &namet2, &description2, &qty2, &ordqty2) != EOF){
    if(namet2 != nameIt2)
        fprintf(fpt2, "%s %s %d %s\n", &namet2, &description2, qty2, &ordqty2);
}
Run Code Online (Sandbox Code Playgroud)

c string comparison

30
推荐指数
3
解决办法
16万
查看次数

为什么strcmp()在输入相等时返回0?

当我调用C字符串比较函数时,如下所示:

strcmp("time","time")

它返回0,这意味着字符串不相等.

任何人都可以告诉我为什么C实现似乎这样做?我认为如果相等,它将返回非零值.我很好奇我看到这种行为的原因.

c

15
推荐指数
3
解决办法
4万
查看次数

使用等于运算符==在C中比较两个字符串的相等性

int main (int argc, **argv)
{
       if (argv[1] == "-hello")
            printf("True\n");
       else
            printf("False\n");
}
Run Code Online (Sandbox Code Playgroud)
# ./myProg -hello
False

为什么?我意识到strcmp(argv[1], "-hello") == 0返回true ...但为什么我不能使用相等运算符来比较两个C字符串?

c string pointers equality equality-operator

13
推荐指数
5
解决办法
5万
查看次数

如何检查值是否与字符串匹配

我在这里有一个结构,例如:

char *sname;
........
players[i].sname
Run Code Online (Sandbox Code Playgroud)

等于"詹姆斯".

我需要检查值之间的相等性,如下所示:

if (players[i].sname == 'Lee')
Run Code Online (Sandbox Code Playgroud)

但我没有太多运气.是否有一个str*我应该使用的功能,或者无论如何都要修复我的if陈述?

c

5
推荐指数
2
解决办法
800
查看次数

如何比较2个字符数组

如何比较这两个字符数组以确保它们相同?

char test[10] = "idrinkcoke"
char test2[10] = "idrinknote"
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用for loop,但我在其他地方读到了我无法test[i] == test2[i]用C 做的事情.

如果有人能帮到我,我真的很感激.谢谢.

c

5
推荐指数
1
解决办法
4万
查看次数

如果条件失灵,则在里面进行字符串

我试图用C语言编程,但并不成功.我有一个简单的源代码,我需要匹配多个字母if (char).它显示以下错误消息(在使用gcc的linux终端中):

main.c:在函数`main'中:main.c:16:23:警告:字符常量对于其类型太长[默认启用]

if(firstName [20] =='Vojta'){

源代码:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    /* code */
    char firstName[20];
    char lastName[40];
    char password[20];
    char confpasswd[20];
    int age;

    printf("Please write your first and last name:");
    scanf("%s%s", firstName, lastName);
    printf("%s %s:\n", firstName, lastName);

    if (firstName[20] == 'Vojta'){
        printf("\ncool\n");
    }

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

c string gcc

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

strcmp()在C中完全返回什么?

我用C编写了这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main()
{
    char string1[20];
    char string2[20];
    strcpy(string1, "Heloooo");
    strcpy(string2, "Helloo");
    printf("%d", strcmp(string1, string2));
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

控制台打印值是1还是字符和字符ASCII值之间的差值,即111?在这个网站上写道,这应该给出111,但当我在我的笔记本电脑上运行时,它显示1.为什么?o\0

c string strcmp

3
推荐指数
2
解决办法
4万
查看次数

如何比较 const char* 字符串?

首先,考虑这个例子:

#include <iostream>
using namespace std;

int main()
{
    cout << ("123" == "123");
}
Run Code Online (Sandbox Code Playgroud)

我期望什么:由于“123”是一个const char*,我期望对这些字符串的地址(如这些答案之一所述)进行比较。

...因为!===只会比较这些字符串的基地址。不是字符串本身的内容。

但输出仍然是1. 好吧,我们实际上不知道如何比较两个纯右值对象的地址(或者至少我不明白它是如何完成的)。因此,让我们将这些字符串声明为变量,看看会发生什么:

#include <iostream>
using namespace std;

int main()
{
    const char* a = "1230";
    const char* b = "1230";
    cout << (a == b);
}
Run Code Online (Sandbox Code Playgroud)

输出仍然是1. 那么const char*琴弦不会衰减吗?或者编译器设法进行一些优化并仅为一个字符串分配内存?好吧,让我们尝试避免它们:

#include <iostream>
using namespace std;

int main()
{
    const char* a = "1230";
    const char* b = "1231";
    b …
Run Code Online (Sandbox Code Playgroud)

c++ pointers string-literals relational-operators

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