- 主题:请教一个char*的问题
最近在将一个C的库转成C++,发现一个问题,在C的库里这段代码能正常工作,如果sourcefile_name没有赋值能够进入到if里:
char sourcefile_name[MAX_FULLPATH_LENGTH] = { 0 };
xxxxx
if (!sourcefile_name){
printf("No source file.\r\n");
return -1;
}
同样这段代码放到C++的编译器里(g++ 4.8.5)编译后就不赋值也进不去,看了文档发现C++编译器认为‘sourcefile_name’的地址总是等价为‘true’,想请教一下这段代码怎么改才能在C++环境里正常工作呢?想过通过sourcefile_name[0]=='\0'来判断,但是这样感觉容易段错误。。。
///////////////
补充一下,因为要二进制落盘,所以还得用char数组来存这个字符串,不用string,所以才会有这样的需求
--
修改:zhongxue FROM 103.216.43.*
FROM 103.216.43.*
这个地方,c 和 c++ 的语义不是一样的吗?
都要写
if (!sourcefile_name[0]) {
...
}
这样子才行吧?
【 在 zhongxue (zhongxue) 的大作中提到: 】
: 最近在将一个C的库转成C++,发现一个问题,在C的库里这段代码能正常工作,如果sourcefile_name没有赋值能够进入到if里:
: char sourcefile_name[MAX_FULLPATH_LENGTH] = { 0 };
: xxxxx
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
感谢回复。
老的C的库里写的是 if (!sourcefile_name),
我之前提过通过sourcefile_name[0]来判断,但是组里面的其他人不同意,说是有可能会造成段错误导致程序崩溃
【 在 hgoldfish 的大作中提到: 】
: 这个地方,c 和 c++ 的语义不是一样的吗?
: 都要写
: if (!sourcefile_name[0]) {
: ...................
--
FROM 103.216.43.*
这不扯蛋么。。你有初始化,哪来的段错误。不然这样:
if (!sourcefile_name || !sourcefile_name[0]) {
...
}
【 在 zhongxue (zhongxue) 的大作中提到: 】
: 感谢回复。
: 老的C的库里写的是 if (!sourcefile_name),
: 我之前提过通过sourcefile_name[0]来判断,但是组里面的其他人不同意,说是有可能会造成段错误导致程序崩溃
: ...................
--
FROM 112.47.122.*
收到,多谢多谢。
【 在 hgoldfish 的大作中提到: 】
: 这不扯蛋么。。你有初始化,哪来的段错误。不然这样:
: if (!sourcefile_name || !sourcefile_name[0]) {
: ...
: ...................
--
FROM 103.216.43.*
原始代码逻辑就是错误的啊,只判断了地址有效性,没有判断内容有效性
--
FROM 124.64.233.153
你们这啥公司啊?好想去混日子
【 在 zhongxue (zhongxue) 的大作中提到: 】
: 感谢回复。
: 老的C的库里写的是 if (!sourcefile_name),
: 我之前提过通过sourcefile_name[0]来判断,但是组里面的其他人不同意,说是有可能会造成段错误导致程序崩溃
:
--
FROM 106.121.183.*
一个数组不管有没有赋值,地址怎么可能为0?
--
FROM 27.186.196.*
问题是楼主说c下可以工作,这我就比较纳闷了。
【 在 pgw (pppppppgw) 的大作中提到: 】
: 一个数组不管有没有赋值,地址怎么可能为0?
--
FROM 218.104.195.*
相当于判断恒假,if语句不存在呗。还是可以工作的。
【 在 somebody 的大作中提到: 】
: 问题是楼主说c下可以工作,这我就比较纳闷了。
: 【 在 pgw (pppppppgw) 的大作中提到: 】
: : 一个数组不管有没有赋值,地址怎么可能为0?
: ...................
--来自微水木3.5.10
--
FROM 223.167.168.*