当前位置: 技术问答>linux和unix
关于LINUX中的字符串指针问题~~~~急!!!(100分)
来源: 互联网 发布时间:2015-10-21
本文导语: 小弟刚从unix下转到linux下开发,这段代码在unix下这是最基本的字符串指针的操作,将a指向的内容更换。 #include #include main() { 1: char *a="asdfadsf"; 2: printf( "[%s]n", a ); 3: strcpy( a, "a...
小弟刚从unix下转到linux下开发,这段代码在unix下这是最基本的字符串指针的操作,将a指向的内容更换。
#include
#include
main()
{
1: char *a="asdfadsf";
2: printf( "[%s]n", a );
3: strcpy( a, "aaaa" );
4: printf( "[%s]n", a );
5: return ;
}
我在suse linux下编译成功,执行发生core........
错误发生在第四句......strcpy()时出错了
我用gdb跟踪了下,错误是这样的,出现了一个内存泄露的信号
Program received signal SIGSEGV, Segmentation fault.
0x40098476 in strcpy () from /lib/i686/libc.so.6
是不是定义了:
1: char *a="asdfadsf";
就不能对这个 char *a 进行重新赋值了啊(或理解成不能操作该段内存?)
CSDN的高人们帮我看看吧,这段代码执行不成功怎么理解啊?
如果是编译方式不对,那该如何编译呢,才能不出现这个core..........
#include
#include
main()
{
1: char *a="asdfadsf";
2: printf( "[%s]n", a );
3: strcpy( a, "aaaa" );
4: printf( "[%s]n", a );
5: return ;
}
我在suse linux下编译成功,执行发生core........
错误发生在第四句......strcpy()时出错了
我用gdb跟踪了下,错误是这样的,出现了一个内存泄露的信号
Program received signal SIGSEGV, Segmentation fault.
0x40098476 in strcpy () from /lib/i686/libc.so.6
是不是定义了:
1: char *a="asdfadsf";
就不能对这个 char *a 进行重新赋值了啊(或理解成不能操作该段内存?)
CSDN的高人们帮我看看吧,这段代码执行不成功怎么理解啊?
如果是编译方式不对,那该如何编译呢,才能不出现这个core..........
|
char *a="asdfadsf";
这样定义的字符串是在静态区分配的,不可更改指针内容!!
换成数组就可以了。
char a[20] = "asdfasdf";
这样定义的字符串是在静态区分配的,不可更改指针内容!!
换成数组就可以了。
char a[20] = "asdfasdf";
|
静态分配的空间,
别忘了在最后free
别忘了在最后free
|
回复人: hundlom(托克维尔) ( ) 信誉:100 2005-09-26 22:59:00 得分: 0
char *a="asdfadsf";
这样定义的字符串是在静态区分配的,不可更改指针内容!!
换成数组就可以了。
char a[20] = "asdfasdf";
同意该观点
char *a="asdfadsf";
这样定义的字符串是在静态区分配的,不可更改指针内容!!
换成数组就可以了。
char a[20] = "asdfasdf";
同意该观点
|
char *a="asdfadsf";
这实际上是一个char const *,是不能被修改的。
这实际上是一个char const *,是不能被修改的。