关于 strlen 函数的用法ovo
我好奇的是为啥这个strlen函数不可以这样写?代码如下:#include <stdio.h>
#include <string.h>
int main()
{
char name;
name = "love";
printf("%d",strlen(name));
return 0;
}
出错提示:赋值使整数从指针没有强制转换
warning: assignment makes integer from pointer without a cast
然后这样写又对了ovo
#include <stdio.h>
#include <string.h>
int main()
{
char name = "love";
printf("%d",strlen(name));
return 0;
}
//主要是没搞懂错误提示的意思
本帖最后由 sunrise085 于 2020-9-11 21:19 编辑
这个错误与strlen无关。。。。。
是因为你定义的是name,但是后面却给name赋值,定义数组长度为100,那么下标是 0~99,你写的赋值语句是name,就会报错说该指针地址未定义
另外nema~name是100个char类型变量,只能用一个字符变量为其赋值,
name="love"本身也有问题啊。怎么能把一个字符串赋值给一个字符变量呢 sunrise085 发表于 2020-9-11 21:18
这个错误与strlen无关。。。。。
是因为你定义的是name,但是后面却给name赋值,定义数组长度为1 ...
好的,知道啦,谢啦ovo 楼上已经给了你正确的答案了,我再补充一点,算是给你学习参考吧:
你定义了一个字符型数组,数组名 name 就会转化为指针,此时,你再给 name 赋值,自然就会提示错误:
VC++6.0提示:warning C4047: '=' : 'char ' differs in levels of indirection from 'char ',意思就是:警告C4047:“=”:“char”与“char的间接寻址级别不同。
DEV_C++的提示: command line option '-std=c99' is valid for C/ObjC but not for C++
invalid conversion from 'const char*' to 'char' [-fpermissive]
从上面的提示来看,VC++6.0对错误比较宽松一点,DEV_C++比较严格一点。因此,初学建议使用VC6.0 (小甲鱼老师的视频《带你学C带你飞》中使用的就是VC++6.0),如果用VS2012的话,有很多与你所学的不一样的地方,编译时检查更严格,有些在VC6下成功运行的程序,在VS2012下编译就报错,编码需要很规范,一些容易造成缓冲区溢出的函数都要用安全的函数取代(如scanf等),刚学习的话,你可能很难完全驾驭。
风过无痕1989 发表于 2020-9-11 21:51
楼上已经给了你正确的答案了,我再补充一点,算是给你学习参考吧:
你定义了一个字符型数组,数组名 nam ...
谢啦ovo
页:
[1]