标签: strcmp

C++ strcmp从'char'转换为'const char*'

你好noob程序员在这里遇到strcmp问题这是我的代码.

while (strcmp("m",wood) !=0 || strcmp("j",wood) !=0 || strcmp("o",wood) !=0){
    cout << "(m for mahogany, o for oak, or p for pine): ";
cin >> wood;
}
Run Code Online (Sandbox Code Playgroud)

这是我的错误.

  • dining.cpp:在成员函数'void DiningSet :: woodType()'中:
  • dining.cpp:76:24:错误:从'char'无效转换为'const char*'[-fpermissive] /usr/include/string.h:143:12:错误:初始化'int strcmp(const)的参数2 char*,const char*)'[-fpermissive]
  • dining.cpp:76:48:错误:从'char'无效转换为'const char*'[-fpermissive] /usr/include/string.h:143:12:错误:初始化'int strcmp(const)的参数2 char*,const char*)'[-fpermissive]
  • dining.cpp:76:72:错误:从'char'无效转换为'const char*'[-fpermissive] /usr/include/string.h:143:12:错误:初始化'int strcmp(const)的参数2 char*,const char*)'[-fpermissive]

c++ char strcmp

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

为什么strcmp在这种情况下不返回0?

所以我从一个文件中逐个读取字符:

char temp[3];

temp[0] = nextchar;
printf("%c",temp[0]); //prints %

temp[1] = nextchar = fgetc(srcptr);
printf("%c",temp[1]); //prints 2

temp[2] = nextchar = fgetc(srcptr);
printf("%c",temp[2]); //prints 0

if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); }
Run Code Online (Sandbox Code Playgroud)

理想情况下,这应该在最后打印"blahblah".但事实并非如此.那么为什么strcmp返回0,更重要的是:我该如何修复呢?

c strcmp

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

什么时候strcmp不会返回-1,0或1?

从手册页:

所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 .

实施例中的代码C(打印-15我的机器上,交换TEST1和TEST2反转值):

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

int main() {
    char* test1 = "hello";
    char* test2 = "world";
    printf("%d\n", strcmp(test1, test2));
}
Run Code Online (Sandbox Code Playgroud)

我发现这个代码(取自这个问题)依赖于strcmp的值不是-1,0和1(它使用返回值qsort).对我来说,这是一种可怕的风格,取决于无证的功能.

我想我有两个相关的问题:

  • C标准中是否有某些内容定义了返回值除了小于,大于或等于零之外的值?如果没有,标准实现有什么作用?
  • 整个Linux,Windows和BSD的返回值是否一致?

编辑:

离开我的电脑5分钟后,我意识到问题代码实际上没有错误.在阅读评论/答案之前,我找出了我想出的部分,但是我把它留在那里以保持评论的相关性.我认为这仍然是一个有趣的问题,可能会导致习惯于其他语言的程序员总是返回-1,0或1(例如Python似乎这样做,但是没有记录这种方式).

FWIW,我认为依赖记录行为以外的其他东西是不好的风格.

c strcmp

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

strcmp在这个程序中有什么问题?

当我运行程序并回答"是"时,它告诉我我错了.有没有人知道执行此类程序的方法?

#include <string.h>
#include <stdio.h>
int strcmp(const char *str1,const char *str2 );

// I am trying to make a program that asks the user to input an answer 
int main() 
{
    char answer[20];


    printf("Can birds fly?\n");   
    scanf("%s", &answer[20]);    


    if(strcmp(answer, "yes") == 0)  
    {
        printf("You are right"); 
    }else
    {
        printf("You are worng"); 
    }

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

c strcmp

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

C-检查第一个命令行争论中的第一个字符是否包含特定字符

如果第一个参数的第一个字符==" - ",则输入if语句.我得到的错误是"传递'strcmp'的参数1使得整数指针没有强制转换"我也用fgetc尝试了这个,写得有点不同,但仍然得到这个错误.如果我施展它,我得到一个核心转储.如果参数包含一个破折号,那么在同一个参数中会跟着数字,所以我不能只将argv [1]看作一个char,如果我可以这么简单:if (strcmp(argv[1], "-")==0)

功能

int main (int argc, const char *argv[]){
    const char *test = argv[1];
    if (strcmp(test[0],"-")==0)
        {
          printf("saw there was a dash");
        }
    return 0;}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

c pointers casting strcmp fgetc

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

strcmp()可以在c ++中使用字符串吗?

我有这行代码

if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

错误C2664:'strcmp':无法将参数1从'std :: string'转换为'const char*'

这是否意味着strcmp不能使用字符串,而是必须将其转换为char?

c++ string strcmp

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

即使比较在相同的字符串之间,strcmp()也会返回错误的值

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    string x;
    cin>>x;

    if(strcmp(&x.at(0), "M") == 0)
    {
        cout<<"midget ";
    }
    else if(strcmp(&x.at(0), "J") == 0)
    {
        cout<<"junior ";
    }
    else if(strcmp(&x.at(0), "S") == 0)
    {
        cout<<"senior ";
    }
    else
    {
        cout<<"invalid code";
    }

    if(strcmp(&x.at(1), "B") == 0)
    {
        cout<<"boys";
    }
    else
    {
        cout<<"girls";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用上面的代码来比较MB应该返回"侏儒男孩",但它继续下降到其他并返回"无效的codeboys".不知何故第二个条件正常.我的诊断告诉我,在第一次比较它返回66.我猜这是"M"的ASCII代码.但是我现在如何解决我的问题呢?

c++ string if-statement strcmp

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

Int数组空 - C

我正在尝试编写一个程序,它将采用两组字符串N和Q.该程序的目标是打印出Q中每个字符串出现在N中的次数.但是,我正在努力管理字符串和指针C,特别是我认为我的问题源于尝试拥有一个字符串数组.执行下面的代码时,我遇到了分段错误.我已经注释了我使用printf()进行调试的尝试.我相信当我尝试将S分配到N_array时会出现问题.

int main() {
    int N, Q; 
    char *N_array[1000], *Q_array[1000];

    scanf("%d", &N);

    for (int N_i = 0; N_i < N; N_i++) {
        //printf("made it through A for loop %d times\n", N_i+1);
        scanf("%s", N_array[N_i]);
    }

    scanf("%d", &Q);

    //Does the array contain any information?
    //for (int N_i = 0; N_i < N; N_i++) { printf("N_array[%d] == %d\n", N_i, N_array[N_i]);}

    for (int Q_i = 0; Q_i < Q; Q_i++) {
        //printf("Made it to B for loop\n");
        int occurs = 0, result;
        char s[21]; …
Run Code Online (Sandbox Code Playgroud)

c arrays string strcmp strcpy

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

被strcmp困惑

我有一个非常简单的函数来将表示位串的3字符串转换为十进制数:

int bin3_to_dec(char *bin) {
  int result;

  result=0;
  printf("string: %s\n", bin);
  printf("c0: %c\n", bin[0]);
  printf("c1: %c\n", bin[1]);
  printf("c2: %c\n", bin[2]);

  if ((strcmp(&bin[0], "1") == 0))
    result += 4;
  if ((strcmp(&bin[1], "1") == 0))
    result += 2;
  if ((strcmp(&bin[2], "1") == 0))
    result += 1;
  printf("result: %d\n", result);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序并为此函数提供111它应该计算的字符串时7.而不是它输出:

string: 111
c0: 1
c1: 1
c2: 1
result: 1
Run Code Online (Sandbox Code Playgroud)

为什么不计算正确的值?为什么只有第三个条件顺利通过?

c string strcmp

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

我无法将字符作为字符串访问

我有以下代码:

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

char values[] = {"abcde"};

int main(int argc, char *argv[])
{
    printf("%d\n", strcmp(&values[0], argv[1]));
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我以这种方式编译和启动:

$ gcc main.c -o main
$ ./main a
98
Run Code Online (Sandbox Code Playgroud)

的结果strcmp是 98,所以值不一样。当我替换&values[0]通过"a"在代码中,我看到,他们是相同的(strcmp输出等于0)。

那么有没有办法values[0]作为字符串访问?我想我需要\0在最后以某种方式指定,以便将字符用作字符串,但我找不到方法。

c string char strcmp

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

标签 统计

strcmp ×10

c ×7

string ×5

c++ ×3

char ×2

arrays ×1

casting ×1

fgetc ×1

if-statement ×1

pointers ×1

strcpy ×1