F–Social 发表于 2020-9-11 21:11:21

关于 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:18:44

本帖最后由 sunrise085 于 2020-9-11 21:19 编辑

这个错误与strlen无关。。。。。
是因为你定义的是name,但是后面却给name赋值,定义数组长度为100,那么下标是 0~99,你写的赋值语句是name,就会报错说该指针地址未定义
另外nema~name是100个char类型变量,只能用一个字符变量为其赋值,
name="love"本身也有问题啊。怎么能把一个字符串赋值给一个字符变量呢

F–Social 发表于 2020-9-11 21:29:01

sunrise085 发表于 2020-9-11 21:18
这个错误与strlen无关。。。。。
是因为你定义的是name,但是后面却给name赋值,定义数组长度为1 ...

好的,知道啦,谢啦ovo

风过无痕1989 发表于 2020-9-11 21:51:03

楼上已经给了你正确的答案了,我再补充一点,算是给你学习参考吧:

你定义了一个字符型数组,数组名 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等),刚学习的话,你可能很难完全驾驭。

F–Social 发表于 2020-9-12 08:21:38

风过无痕1989 发表于 2020-9-11 21:51
楼上已经给了你正确的答案了,我再补充一点,算是给你学习参考吧:

你定义了一个字符型数组,数组名 nam ...

谢啦ovo
页: [1]
查看完整版本: 关于 strlen 函数的用法ovo