我正在做一些练习,并试图仅使用指针(无字符数组)连接两个字符串。
我的代码似乎可以编译(注意:我使用的是旧的 16 位 Open Watcom 编译器):
#include <stdio.h>
int main(){
char *str1 = "first";
char *str2 =" second";
strcat2(str1,str2);
for(;*str1!='\0';str1++){
printf(str1);
}
return 0;
}
int strcat2(char *s,char *t){
for(;*s!='\0';s++){
;
}
while((*s++ = *t++)!='\0'){
;
}
*t++;
t='\0';
return 0;
}
当我尝试运行它时,什么也没有发生。
我确信我的上述工作存在严重缺陷。任何建议和帮助将不胜感激。
最佳答案
您声明的 str1
和 str2
是字符串文字,不能修改。在 linux 可执行文件中,str1
和 str2
指向的地址的内容存储在不可写的可执行文件的 .rodata
部分中。在其他可执行文件中,内容存储在不可写的类似位置。您应该使用数组或动态分配的内存区域来完成这项工作。确保在连接要粘贴的字符串时,另一个字符串有足够的空间来容纳它们。
EDIT1:
要么做
char str1[BUFF_SIZ] = "Hello", str2[BUFF_SIZ] = " Man";
/* Now do strcat */
/* The strlen (str1) + strlen (str2) should be lessthan BUFF_SIZ */
或者
char *str1, *str2;
str1 = malloc (sizeof (char) * BUFF_SIZ);
str2 = malloc (sizeof (char) * BUFF_SIZ);
strcpy (str1, "Hello");
strcpy (str2, " Man");
/* Now do strcat */
/* The strlen (str1) + strlen (str2) should be lessthan BUFF_SIZ */
关于C 指针问题连接字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6161082/