如何比较字符串数组中的特定字符串?C语言代码问题求助
你的C语言字符串问题分析与解决
问题1:数组下标越界
你定义的char names[1][5];是一个仅包含1个字符串元素的二维数组,C语言数组下标从0开始,所以唯一有效的元素是names[0]。names[1]已经超出数组的有效范围,会触发未定义行为(程序崩溃、数据错乱等),这是代码无法正常运行的第一个原因。
问题2:字符串比较方式错误
C语言中,==用于指针比较时,判断的是两个指针指向的内存地址是否相同,而非字符串内容是否一致。字符串字面量"Welp"存储在常量数据区,而names数组存储在栈上,两者地址必然不同,所以names[1] == "Welp"永远为假。
要比较字符串的实际内容,必须使用标准库函数strcmp(需包含头文件<string.h>)。
修正后的代码
#include <stdio.h> #include <string.h> int main() { char names[1][5]; // 使用合法的数组索引0 strcpy(names[0], "Welp"); // strcmp返回0表示两个字符串内容完全相等 if (strcmp(names[0], "Welp") == 0) { printf("alright works\n"); } return 0; }
strcmp函数说明
strcmp(a, b)会逐字符对比两个字符串的ASCII值:
- 返回值 < 0:
a的字典序小于b - 返回值 = 0:
a和b内容完全一致 - 返回值 > 0:
a的字典序大于b
内容的提问来源于stack exchange,提问作者Sarthak Hingankar
相关产品推荐
相关产品推荐

