请问 为什么我的两个字符串没有连接上呀😭


#include<stdio.h> 
#include<string.h>
int main()
{
    char str1[100],str2[100];
    printf("请输入第一个字符串\n");
    gets(str1);
    printf("请输入第二个字符串\n");
    gets(str2);
    
    char *p1=str1,*p2=str2;
    p1=str1,p2=str2;
    
    for(p1=str1;*p1='\0';p1++){}//str1最后一位 
    
    while(*p2!='\0'){
        *p1=*p2;
        p1++,p2++;    
    }
    
    *p1='\0';
    printf("连接后的字符串为\n");
    puts(str1);
    
    int len,i;
    len=strlen(str1);
    
    printf("逆序排序结果为\n");
    for(i=len-1;i>=0;i--){
        printf("%c",str1[i]);
    }
    
    return 0;

}

img

for(p1=str1;*p1='\0';p1++){} //str1最后一位

循环条件改成 *p1 != '\0' 即可

用strcat

strcat(str1, str2);
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/933425
  • 这篇博客也不错, 你可以看下将无序数组插入有序链表
  • 除此之外, 这篇博客: 进程管理的概念中的 环境变量具有全局属性 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 根本原因:环境变量可以被子进程继承下去(而bash的是从环境变量从系统中读取来的,而系统又是从配置文件中读取的)

    我们在命令行上面启动的进程(子进程),父进程都是我们的bash!(命令行解释器) ,启动方式调用fork函数。export实际上是把本地变量导给了父进程bash!

    证明:

    我们先设置一个本地变量:my_env_string="AAAAA"

    通过它来查看

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
      printf("my_env_string: %s\n",getenv("my_env_string"));
      return 0;
    }

    我们通过在命令行上敲击指令(子进程),确实可以查看到我们人为导入后的环境变量,但是我们的export是导给bash进程的(父进程),原来运行程序失败,现在导入后(意思就是现在父进程多了一个环境变量),再次敲击命令(子进程),结果成功,这就说明了我们的子进程继承到了我们父进程bash的环境变量 ,这就是环境变量具有全局属性

    总结:环境变量可以被继承,就是说可以影响整个“用户”系统!

     所以我们在用一些gdb、gcc命令时,不用带那么多选项就能执行,本质就是从bash那里继承了环境变量。

    谢谢观看!