在C中调用strcat的错误

软件和网站开发以及相关技术探讨
回复
头像
liuhello
帖子: 216
注册时间: 2007-04-24 13:44

在C中调用strcat的错误

#1

帖子 liuhello » 2008-09-09 1:08

我的源代码如下:

代码: 全选

(gdb) list
1	#include<stdio.h>
2	#include<string.h>
3	
4	int main(int argc,char*argv[])
5	{
6		char *str = "Hello";
7		char *str1 = " World";
8		strcat(str,str1);
9		printf(str);
10		return 0;
(gdb) 
11	}
调用的时候错误如下

代码: 全选

Breakpoint 1, main () at strcat.c:6
6		char *str = "Hello";
(gdb) n

Breakpoint 2, main () at strcat.c:7
7		char *str1 = " World";
(gdb) n

Breakpoint 3, main () at strcat.c:8
8		strcat(str,str1);
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0xb7df1ad5 in strcat () from /lib/tls/i686/cmov/libc.so.6
(gdb) 
看了下,不知道为什么会有错,如果不调试直接运行,就会报“段错误”
网上查了是内存溢出。但是我在网上查strcat的用法和上面的一模一样。
man 3 strcat看了下strcat的文档,文档的说明,上面的用法也是合法的。
为什么这里却会报错呢?
不懂,求助。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

#2

帖子 自由建客 » 2008-09-09 14:59

char *str = "Hello";
兄弟,str是常量 strcat(str,str1); 当然错了。
hjmamo520
帖子: 3
注册时间: 2008-10-30 12:42

Re: 在C中调用strcat的错误

#3

帖子 hjmamo520 » 2008-11-09 3:04

char *str = "Hello";
char *str1 = " World";
str和str1指向都是常量字符串区,运行过程中不能修改,当然会导致段错误
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: 在C中调用strcat的错误

#4

帖子 xhy » 2008-11-09 5:32

其实不是常量

是undefined

某些编译器下作为常量看待,某些则不是
目前负债150多万
回复