,一个strcat的有关问题
求助,一个strcat的问题#include stdio.hchar * strcat (char *s, char *t)int main (){char *str1 a
求助,一个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 = "abcedft"; // 指向常量"abcedft"的指针,内容不可变,指针可指向别的内容
char str[20] = "abcedft" // 数组内容可变,但首地址不会改变。
[解决办法][解决办法]1楼是正解,这个刚在另外的帖子有讨论
str1和 str2都指向程序存储空间的常量数据区,你在strcat函数中试图修改常量数据区的内存空间 肯定会崩溃的。
如果要把str1的空间写死就搞大点,否则str进去后有内存冲突
[解决办法]学习 天天向上
[解决办法][解决办法]收获不小, 学习了
[解决办法][解决办法][解决办法]
记住了 用指针声明 如 char * p="suyahui";在常量区 不能被修改的,,,还有就是 sizeof指针 类型 永远是 4
[解决办法]
习惯定义数组时不指定,会遇到很多问题啊。。。
[解决办法]
[解决办法]#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;
}
看我给你省了一大串,给分啊