鱼C论坛

 找回密码
 立即注册
查看: 1041|回复: 4

[已解决]关于 strlen 函数的用法ovo

[复制链接]
发表于 2020-9-11 21:11:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我好奇的是为啥这个strlen函数不可以这样写?代码如下:
#include <stdio.h>
#include <string.h>
int main()
{        
        char name[100];
        name[100] = "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[100] = "love";
        
        
        printf("%d",strlen(name));
        return 0;
} 
//主要是没搞懂错误提示的意思
最佳答案
2020-9-11 21:18:44
本帖最后由 sunrise085 于 2020-9-11 21:19 编辑

这个错误与strlen无关。。。。。
是因为你定义的是name[100],但是后面却给name[100]赋值,定义数组长度为100,那么下标是 0~99,你写的赋值语句是name[100],就会报错说该指针地址未定义
另外nema[0]~name[99]是100个char类型变量,只能用一个字符变量为其赋值,
name[100]="love"  本身也有问题啊。怎么能把一个字符串赋值给一个字符变量呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-11 21:18:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-9-11 21:19 编辑

这个错误与strlen无关。。。。。
是因为你定义的是name[100],但是后面却给name[100]赋值,定义数组长度为100,那么下标是 0~99,你写的赋值语句是name[100],就会报错说该指针地址未定义
另外nema[0]~name[99]是100个char类型变量,只能用一个字符变量为其赋值,
name[100]="love"  本身也有问题啊。怎么能把一个字符串赋值给一个字符变量呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 21:29:01 | 显示全部楼层
sunrise085 发表于 2020-9-11 21:18
这个错误与strlen无关。。。。。
是因为你定义的是name[100],但是后面却给name[100]赋值,定义数组长度为1 ...

好的,知道啦,谢啦ovo
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-11 21:51:03 | 显示全部楼层
楼上已经给了你正确的答案了,我再补充一点,算是给你学习参考吧:

你定义了一个字符型数组,数组名 name 就会转化为指针,此时,你再给 name 赋值,自然就会提示错误:

VC++6.0提示:warning C4047: '=' : 'char ' differs in levels of indirection from 'char [5]',意思就是:警告C4047:“=”:“char”与“char[5]的间接寻址级别不同。

DEV_C++的提示:[Warning] command line option '-std=c99' is valid for C/ObjC but not for C++
                         [Error] invalid conversion from 'const char*' to 'char' [-fpermissive]

从上面的提示来看,VC++6.0对错误比较宽松一点,DEV_C++比较严格一点。因此,初学建议使用VC6.0 (小甲鱼老师的视频《带你学C带你飞》中使用的就是VC++6.0),如果用VS2012的话,有很多与你所学的不一样的地方,编译时检查更严格,有些在VC6下成功运行的程序,在VS2012下编译就报错,编码需要很规范,一些容易造成缓冲区溢出的函数都要用安全的函数取代(如scanf等),刚学习的话,你可能很难完全驾驭。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

谢啦ovo
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表