C语言中strcmp函数的问题
如果我strcmp其中一个字符串是一个数组,比方说name[10],但是我在scanf,或者gets的时候并不一定是10个字符,可能只打了几个,假设是abc。 那么剩余的其他几位就会是系统随机出的东西。这样的话我 strcmp(name,'abc')能有应该的效果么?数组后面几位会影响函数返回值么。有的话怎么解决这个问题
如果我strcmp其中一个字符串是一个数组,比方说name[10],但是我在scanf,或者gets的时候并不一定是10个字符,可能只打了几个,假设是abc。 那么剩余的其他几位就会是系统随机出的东西。这样的话我 strcmp(name,'abc')能有应该的效果么?数组后面几位会影响函数返回值么。有的话怎么解决这个问题
答案:c风格字符串是以'\0'为结束标志的。如果你的name[10]没有初始化,用scanf得到前3个字符为abc,后面的是随机的,当你使用strcmp(name, "abc")的时候,有可能你的name低第四个字符正好是'\0',那么此时就是两个相同,否则就是不同。举个例子
如果你的name的分布是"abc\0defghi";此时你使用strlen获取他的长度将会是3,这就是c风格字符串以'\0'结束,后面的就不考虑了,使用strcmp也是同样的道理。
解决的办法是你在name定义的时候初始化
两种方法
1、char name[10] = {0};
2、char name[10];
memset(name, 0, sizeof(name));
当然会有影响了,解决的办法很简单,在创建数组的时候进行初始化 char name[10]={0}; 就可以了难度太大了啊
上一个:C语言 自增自减运算符应用举例 求解!
下一个:C语言:学习的技巧