免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6353 | 回复: 14
打印 上一主题 下一主题

C++中定义变量时赋值的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-05 10:47 |只看该作者 |倒序浏览
我定义了一个全局变量,并且在定义的时候给它赋值,如下:

char program_name[256] = "mjpeg.elf"

然后在后来这样使用:

strcpy(program_name, (char*)argv[1]);

结果发现程序出错,用gdb调试发现是因为这句出现了Segment Fault.

后来我取消了定义变量时的赋值,即这样:

char program_name[256] ;

发现程序就无误了。

大家说说看,是不是C++当中在定义字符串变量时如果为其赋值,就会被编译成non-modifiable?

论坛徽章:
0
2 [报告]
发表于 2008-12-05 11:03 |只看该作者
不管是C还是C++

char program_name[256] = "mjpeg.elf";
只是字符数组的初始化而已,后面自动添加一个'\0'

但是program_name肯定是可以修改的

你的段错误或许是其它原因引起的

论坛徽章:
0
3 [报告]
发表于 2008-12-05 11:09 |只看该作者
最好是贴个小程序来说下,再说下你输入的参数.

还有搞不懂你argv[1]为什么要类型转换下.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2008-12-05 11:09 |只看该作者
原帖由 tjsailor 于 2008-12-5 10:47 发表
我定义了一个全局变量,并且在定义的时候给它赋值,如下:

char program_name[256] = "mjpeg.elf"

然后在后来这样使用:

strcpy(program_name, (char*)argv[1]);

结果发现程序出错,用gdb调试发现是 ...

你执行程序时带参数了没?例如: ./hello program_name

program_name[]是数组不是指针,可以修改。

论坛徽章:
0
5 [报告]
发表于 2008-12-05 11:25 |只看该作者
原帖由 ynchnluiti 于 2008-12-5 11:09 发表

你执行程序时带参数了没?例如: ./hello program_name

program_name[]是数组不是指针,可以修改。


是这样的,我的程序名字叫single,我如下运行:

./single hello_test.elf

这样arg[1]应该是hello_test.elf吧,我就想把hello_test.elf赋给program_name。

论坛徽章:
0
6 [报告]
发表于 2008-12-05 11:25 |只看该作者
原帖由 hr_it 于 2008-12-5 11:09 发表
最好是贴个小程序来说下,再说下你输入的参数.

还有搞不懂你argv[1]为什么要类型转换下.


确实没有什么用,因为argv[1]本来就是char*的,我拿到的代码就是这样的,也没有去修改,但是这个也不应该是问题对把?

论坛徽章:
0
7 [报告]
发表于 2008-12-05 11:33 |只看该作者
Test again

论坛徽章:
0
8 [报告]
发表于 2008-12-05 11:48 |只看该作者
我还是觉得lz测试的时候没加后面的参数。。。

在程序里加
if(argc > 1)
{
        strcpy(program_name, argv[1]);
        //
}
试一下?

论坛徽章:
0
9 [报告]
发表于 2008-12-05 11:49 |只看该作者
#include <iostream>
#include <cstring>
using namespace std;

char program_name[256] = "mjpeg.elf";

int main(int argc, char *argv[])
{
        strcpy(program_name, (char*)argv[1]);
        cout << program_name << endl;

        return 0;
}

xlC_r -o out test.cpp

#./out hello_test.elf
hello_test.elf

运行环境:aix 系统

论坛徽章:
0
10 [报告]
发表于 2008-12-05 12:13 |只看该作者
恩,谢谢大家!

按照9楼,我也自己写了个类似的简单程序,发现的确不是这个问题。

可能gdb报错有点问题,有可能是其他地方的问题,我再找找看吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP