标签: strcmp

strcmpi重命名为_strcmpi?

在MSVC++中,有一个函数strcmpi用于不区分大小写的C字符串比较.

当你尝试使用它时,它会,

从Visual C++ 2005开始,不推荐使用此POSIX函数.请改用ISO C++符合_stricmp.

我没有看到的是为什么ISO不希望MSVC++使用strcmpi,为什么_stricmp是首选方式,为什么他们懒得重命名函数,以及函数如何以下划线ISO符合开头.我知道所有这一切都有理由,我怀疑它是因为strcmpi是非标准的,也许ISO希望非标准扩展以_underscore开头?

c c++ string strcmp

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

比较字符串中的char与给定的char

我有以下内容:

int findPar(char* str)
{
int counter=0;

while (*str) 
{
    if(str[0] == "(") <---- Warning
    {
        counter++;
    }
    else if (str[0]== ")") <---- Warning
    {
        counter--;
    }
    if (counter<0) 
    {
        return 0;
    }
    str++;
}

if (counter!=0) 
{
    return 0;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)

我得到的警告是int和char之间的比较.

我试着用strcmp做这样的比较(字符串中的第一个char和给定的char):

    if (strcmp(str, ")")==0) { stuff }
Run Code Online (Sandbox Code Playgroud)

但即使比较(应该)正确,它也永远不会进入"东西".

我该怎么办?

c c++ string strcmp

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

strcmp有什么问题?

阅读字符串中的问题并将其与C进行比较时,不止一个人不鼓励使用strcmp(),说像

我也强烈建议你现在习惯使用strncmp(),以避免很多问题.

或(为什么我的字符串比较失败?)

确保你使用strncmp而不是strcmp.strcmp非常不安全.

他们提到了什么问题?

之所以scanf()用绳子符gets()强烈劝阻,是因为他们几乎不可避免地导致缓冲区溢出漏洞.但是,用缓冲区溢出是不可能的strcmp(),对吧?

"缓冲区溢出或缓冲区溢出是一种异常现象,程序在将数据写入缓冲区时会超出缓冲区的边界并覆盖相邻的内存."

( - 维基百科:缓冲区溢出).

由于strcmp()函数永远不会写入任何缓冲区,strcmp()函数不会导致缓冲区溢出,对吧?

人们不鼓励使用strcmp()和推荐的原因是什么strncmp()

c string deprecated strcmp

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

执行strcmp

我试图实现strcmp:

int strCmp(char string1[], char string2[] )
{
    int i=0,flag=0;    
    while(flag==0)
    {
        if (string1[i]>string2[i])
        {
            flag=1;
        }
        else if (string1[i]<string2[i])
        {
            flag=-1;
        }
        else
        {
            i++;
        }
    }
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

但我坚持用户将输入相同字符串的情况,因为该函数使用1和-1,但它不返回0.任何人都可以帮忙吗?请不要指点!

c strcmp

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

Swift 为什么退格的 strcmp 返回 -92?

我试图检测 UITextfieldDelegate 内部的退格。并找到了这个答案。 /sf/answers/3450640931/

它工作正常。

但我不知道这个函数内部发生了什么。

let  char = string.cString(using: String.Encoding.utf8)!
let isBackSpace = strcmp(char, "\\b")

if isBackSpace == -92 {
    print("Backspace was pressed")
    return false
}
Run Code Online (Sandbox Code Playgroud)
  1. 我不知道为什么退格的cString的结果是0。我可以在XCode上调试。请检查屏幕截图。

在此处输入图片说明

  1. 我不知道为什么 strcmp 大约 0 表示退格(就我在 XCode 调试器上得到的这个值而言)和“\b”字符返回 -92

在此处输入图片说明

我知道退格的 ascii 代码是 int 类型的“8”,所以我认为上面的函数会像下面的代码一样。

// I thought this char would be "\b" of type char or 08 of type int
// but XCode give the value 0... I don't know why
let char = string.cString(using: String.Encoding.utf8)!

// as far as I know, strcmp …
Run Code Online (Sandbox Code Playgroud)

strcmp backspace uitextfielddelegate swift

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

C - 比较数字字符串

出于专业的好奇心,比较C中两个完全数字字符串的最安全/最快/最有效的方法是什么?

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

int main(void){

char str1[5] = "123";
char str2[5] = "123";
char *ptr;

if(atoi(str1) == atoi(str2))
    printf("Equal strings");

if(strtol(str1,&ptr,10) == strtol(str2,&ptr,10))
    printf("Equal strings");

if(strcmp(str1,str2)==0)
    printf("Equal strings");

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

c atoi strcmp strtol

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

strcmp()为相同的字符串比较返回不同的值

char s1[] = "0";
char s2[] = "9";
printf("%d\n", strcmp(s1, s2));   // Prints -9
printf("%d\n", strcmp("0", "9")); // Prints -1
Run Code Online (Sandbox Code Playgroud)

为什么strcmp在收到相同参数时会返回不同的值?

这些值仍然合法,因为strcmp的手册页说strcmp的返回值可以小于,大于或等于0,但我不明白为什么它们在这个例子中是不同的.

manpage string-comparison strcmp string.h

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

如果两个相似的字符串长度不同,strcmp返回什么?

我了解,如果您在strcmp中有“ cat”(字符串1)和“ dog”(string2)(这是一个C问题),则strcmp的返回值将小于0(因为“ cat”在词法上小于“ dog” ')。

但是,如果发生这种情况,我不确定strcmp会发生什么:

string1: 'dog'
string2: 'dog2'.
Run Code Online (Sandbox Code Playgroud)

strcmp会返回什么?小于零,零或大于?对于上下文,我正在尝试编写一个比较器函数来比较字符串,并希望考虑以相同字符开头的字符串。一个字符串可能具有扩展名(例如上例中的“ dog2”中的“ 2”)。

编辑:这不是重复的问题。据称这与之类似的问题是询问返回类型代表什么-我是说,当字符串在某一点上相同之前,但其中一个停止,而另一个继续时,会发生什么。

c strcmp

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

strcmp无法正常工作

我知道这可能是一个全新的问题(我很长一段时间没有接触过C),但有人可以告诉我为什么这不起作用吗?

printf("Enter command: ");
bzero(buffer,256);
fgets(buffer,255,stdin);

if (strcmp(buffer, "exit") == 0)
    return 0;
Run Code Online (Sandbox Code Playgroud)

如果我输入"exit"它不会输入if,它是否与"buffer"的长度有关?

有什么建议?

c strcmp

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

为什么在C++中使用strcmp而不是==?

我想我的代码可以完全正常使用strcmp或只是==在C++中比较2个char数组.任何人都可以证明使用的原因strcmp而不是==;

c++ strcmp

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