C 指针问题连接字符串

标签 c pointers concatenation

我正在进行一些练习,并尝试仅使用指针(无字符数组)连接两个字符串。 我的代码似乎可以编译(注意:我使用的是旧的 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;
}

当我尝试运行它时,没有任何反应。 我确信我的上述工作存在严重缺陷。非常感谢任何建议和帮助。

最佳答案

你声明的str1str2是字符串字面量,不能修改。在 linux 可执行文件中,str1str2 指向的地址内容存储在不可写的可执行文件的 .rodata 部分。在其他可执行文件中,内容存储在不可写的类似位置。您应该使用数组或动态分配的内存区域来完成这项工作。确保在连接要粘贴的字符串时,另一个字符串有足够的空间容纳它们。

编辑 1:

要么做

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/

相关文章:

c - 这些包含在 Eclipse 中的哪里设置?

C 使用指针创建矩阵,然后从矩阵中复制元素

c++ - 如何最好地处理 C++ 对象初始化 : empty constructors or pointers?

sql - 如何将两个 PostgreSQL 列聚合到一个用方括号分隔的数组

c++ - long long 转换为字节数组

C99:处理 `pow()`(溢出或复数)引发的异常的推荐方法是什么

python - 连接 pandas 数据框中的所有列

python - 将 DataFrame 与相似和不相交的列连接起来

c - malloc/free,似乎获得了多次释放

函数生成多态对象的 C++ 返回类型?