读书人

一个strcat的有关问题

发布时间: 2012-07-22 19:31:18 作者: rapoo

求助,一个strcat的问题
#include <stdio.h>

char * strcat (char *s, char *t);

int main ()
{
char *str1 = "abcdeft";
char *str2 = "1111";
strcat(str1, str2);
printf("now str1 is %s\n", str1);
return 0;
}

char * strcat (char *s, char *t)
{
//int i=0;
while (*s)
s++;
while (*t)
{
*s++ = *t++;
}
return s;
}

编译可以过,但一执行就出问题,什么原因?

[解决办法]

char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
char str2[10] = "1111";
你想把str2连接到str1的末尾,还必须保证str1有足够大的空间容纳str2
[解决办法]
常量区啊常量区……
[解决办法]

探讨
char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
char str2[10] ……

[解决办法]
二楼正解
char *str1 = "abcedft"; // 指向常量"abcedft"的指针,内容不可变,指针可指向别的内容
char str[20] = "abcedft" // 数组内容可变,但首地址不会改变。
[解决办法]
探讨
char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
char str2[10] ……

[解决办法]

1楼是正解,这个刚在另外的帖子有讨论
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会崩溃的。
如果要把str1的空间写死就搞大点,否则str进去后有内存冲突
[解决办法]
学习 天天向上
[解决办法]
探讨
char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
char str2[10] ……

[解决办法]
收获不小, 学习了
[解决办法]
探讨
引用:
char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
c……

[解决办法]
探讨
#include <stdio.h>

char * strcat (char *s, char *t);

int main ()
{
char *str1 = "abcdeft";
char *str2 = "1111";
strcat(str1, str2);
printf("now str1 is %s\n", str1);
return 0;
}

char *……

[解决办法]


记住了 用指针声明 如 char * p="suyahui";在常量区 不能被修改的,,,还有就是 sizeof指针 类型 永远是 4
[解决办法]
习惯定义数组时不指定,会遇到很多问题啊。。。
[解决办法]

探讨
char *str1 = "abcdeft";
char *str2 = "1111";
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会奔溃的。
把char *str1 = "abcdeft";
char *str2 = "1111";
改成char str1[20] = "abcdeft";
char str2[10] ……

[解决办法]
#pragma comment(linker,"/SECTION:.rdata,RW")
加上面这句可以让常量区可修改。但不提倡这么做。
[解决办法]
#include <stdio.h>

#include<string.h>

int main ()
{
char str1[44] = "abcdeft";
char *str2 = "1111";
strcat(str1, str2);
printf("now str1 is %s\n", str1);
return 0;
}

看我给你省了一大串,给分啊

读书人网 >C语言

热点推荐