Tag: strcmp

比较字符串中的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; } 我得到的警告是int和char之间的比较。 我尝试进行比较(字符串中的第一个char与给定的char)以及strcmp,如下所示: if (strcmp(str, “)”)==0) { stuff } 但即使比较(应该)是正确的,它也永远不会进入’东西’。 我该怎么办?

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

我明白如果你在strcmp中有’cat’(string1)和’dog’(string2)(这是一个C问题)那么strcmp的返回值将小于0(因为’cat’在词法上小于’dog’ “)。 但是,如果发生这种情况,我不确定strcmp会发生什么: string1: ‘dog’ string2: ‘dog2′. strcmp将返回什么? 小于零,零或大于? 对于上下文,我试图编写一个比较器函数来比较字符串,并希望考虑以相同字符开头的字符串。 一个字符串可能有一个扩展名(例如上面例子中’dog2’中的’2’)。 编辑:这不是一个重复的问题。 这个问题据说类似于回复类型代表的问题 – 我说的是当字符串相同到一个点但随后其中一个停止而另一个继续时会发生什么。

优化的strcmp实现

这个function在这里找到。 这是strcmp的一个实现: int strcmp(const char* s1, const char* s2) { while (*s1 && (*s1 == *s2)) s1++, s2++; return *(const unsigned char*)s1 – *(const unsigned char*)s2; } 我理解除了最后一行之外的所有内容,简言之,最后一行是怎么回事?

strcmp行为

当我运行以下代码时: #include int main(int argc, char *argv[]) { int p = 0; p = strcmp(NULL,”foo”); return 0; } 我得到分段错误。 回声$? 139.但是当我跑的时候 #include int main(int argc, char *argv[]) { int p = 0; strcmp(NULL,”foo”); // Note removed assignment return 0; } 我没有任何分段错误。 有人可以请一些光吗? 这是我的gcc信息: > gcc –version gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-8)

在没有语法错误的情况下,此代码中的if情况不起作用

if(s.name==”kolkata”) { printf(“the details”); } if(strcmp((s.name,”kolkata”)==0) { printf(“the details”); } 第一个“如果”的情况没有语法错误仍然不起作用,而第二个“if”情况确实非常有效,为什么?

scanf和strcmp with c string

我找到了一个很好的例子 ,说明如何使用strcmp,但它只适用于fgets(),我需要使用scanf。 所以,这是代码: int main(void) { char fruit[] = “apple\n”; char ans[80]; do { printf (“Guess my favorite fruit? “); scanf (“%s”,ans); } while (strcmp (fruit, ans) != 0); puts (“Correct answer!”); return 0; } 即使我写了正确的answear(“苹果”),它仍然留在循环中并一直问我最喜欢的水果……我猜它与没有写在ans [80]的字符有关。 (我需要它是一个最多80chars的char数组)。 我不是这个…… 提前致谢。

使用strcmp比较char数组中的字符

我想使用strcmp在char数组中查找特定字符。 例如,我想检测索引号在哪里. 在文中。 char host[100] = “hello.world”; size_t i=0; for(i=0;i<strlen(host);i++){ if(strcmp(host[strlen(host)-i], ".")){ printf("%d\n",i); } } 但是,它输出”passing argument 1 of ‘strcmp’ makes pointer from integer without a cast ” 。 我注意到char数组是一个int,但我无法弄清楚我应该如何传递char索引。 你能告诉我应该如何使用这个function吗?

strcmp有什么问题?

在阅读字符串中的问题并将其与C进行比较的回答中 ,不止一个人不鼓励使用strcmp() ,说像 我也强烈建议你现在习惯使用strncmp(),以避免很多问题。 或( 为什么我的字符串比较失败? ) 确保你使用strncmp而不是strcmp。 strcmp非常不安全。 他们提到了什么问题? 强烈建议不要 使用带字符串说明符和gets() scanf() ,因为它们几乎不可避免地导致缓冲区溢出漏洞。 但是,使用strcmp()溢出缓冲区是不可能的,对吗? “缓冲区溢出或缓冲区溢出是一种exception现象,程序在将数据写入缓冲区时会超出缓冲区的边界并覆盖相邻的内存。” ( – 维基百科:缓冲区溢出 )。 由于strcmp()函数永远不会写入任何缓冲区,strcmp()函数不会导致缓冲区溢出,对吧? 人们不鼓励使用strcmp()的原因是什么,并推荐使用strncmp() ?

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

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

从手册页: 如果找到s1(或其前n个字节),则strcmp()和strncmp()函数返回小于,等于或大于零的整数,小于,匹配或大于s2 。 C中的示例代码(在我的机器上打印-15 ,交换test1和test2反转该值): #include #include int main() { char* test1 = “hello”; char* test2 = “world”; printf(“%d\n”, strcmp(test1, test2)); } 我发现这个代码 (取自这个问题 )依赖于strcmp的值不是-1,0和1(它使用qsort的返回值)。 对我来说,这是一种可怕的风格,取决于无证的function。 我想我有两个相关的问题: C标准中是否有某些内容定义了返回值除了小于,大于或等于零之外的值? 如果没有,标准实现有什么作用? 整个Linux,Windows和BSD的返回值是否一致? 编辑: 离开我的电脑5分钟后,我意识到问题代码实际上没有错误。 在阅读评论/答案之前,我找出了我想出的部分,但是我把它留在那里以保持评论的相关性。 我认为这仍然是一个有趣的问题,可能会导致习惯于其他语言的程序员总是返回-1,0或1(例如Python似乎这样做,但是没有记录这种方式)。 FWIW,我认为依赖记录行为以外的其他东西是不好的风格。