C语言中的字符串连接

C语言中的字符串连接,c,char,C,Char,我读了一篇文章,其中展示了c(64位,linux)中两个字符数组的串联,然后我发现了问题: 我在windows中运行代码,但得到了另一个结果 运行代码“*a=*b”时,a和b之间的地址不同 在第二个while循环中,代码只运行了两次,b指针是“\000”,并且存在于循环中 代码如下: #包括 内部主(空) { char aa[]=“Studytonight”; char bb[]=“-最佳学习场所”; char*a; char*b; printf(“aa[%s]\n”,aa); printf(“

我读了一篇文章,其中展示了c(64位,linux)中两个字符数组的串联,然后我发现了问题:

  • 我在windows中运行代码,但得到了另一个结果
  • 运行代码“*a=*b”时,a和b之间的地址不同
  • 在第二个while循环中,代码只运行了两次,b指针是“\000”,并且存在于循环中
  • 代码如下:

    #包括
    内部主(空)
    {
    char aa[]=“Studytonight”;
    char bb[]=“-最佳学习场所”;
    char*a;
    char*b;
    printf(“aa[%s]\n”,aa);
    printf(“bb[%s]\n”,bb);
    a=aa;
    b=bb;
    而(*a)
    {
    a++;
    }
    而(*b)
    {
    *a=*b;
    b++;
    a++;
    }
    *a='\0';
    printf(“连接后的字符串是:%s\n”,aa);
    printf(“bb现在是[%s]\n”,bb);
    系统(“暂停”);
    返回(0);
    }
    
    这是我想知道的文章中的结果,是第二个第三个问题,我不需要已经存在的函数来连接两个字符数组。

    您试图将字节附加到字符串aa,但只有足够的字节来保存其自身的内容。如果您想实际添加更多字节,您应该首先分配更大的数组。像这样:

    char aa[80]=“Studytonight”;
    

    这里80是一个任意的“足够大”的数字——数组的末尾将有一些额外的空间,可以从字符串bb中添加字节。

    连接两个字符串时

  • 结果缓冲区的长度必须足以容纳两个字符串+1。+1表示NUL终止字符

  • 函数:
    strcat()
    (原型为
    string.h
    )为您执行串联

  • 建议:

    #include <stdio.h>   // puts()
    #include <string.h>  // strlen(), strcat()
    
    int main( void )
    { 
        char aa[] = "Studytonight ";
        char bb[] = "- Bestplace to learn";
    
        char cc[ strlen( aa ) + strlen( bb ) + 1 ];
    
        strcpy( cc, aa );
        strcat( cc, bb );
    
        puts( cc );
    }
    
    注意:链接代码包含未定义的行为。这是因为它的写入超出了缓冲区的末尾
    aa[]
    。这可能导致“堆栈崩溃”甚至seg故障事件

  • 尝试使用函数。不要对
    主程序中的所有内容进行编程
  • 确保有足够的空间容纳两个字符串,因为C不会检查是否写入或读取超出数组边界
  • 还有洗澡的例子:


    函数:
    system()
    在头文件中是原型:
    stdlib.h
    但是,发布的代码缺少以下语句:
    #include
    因此没有干净地编译AKS谢谢你的帮助,我是一个初学者。感谢你的帮助,我用aa[80]成功运行了它但是blog.holbertonschool.com/code-review-string-concatenation-in-c这篇文章中的代码并没有减少aa的大小,它也得到了结果,我的主要问题是我给出的第二个和第三个问题。如果你仔细阅读,作者会发现代码是错误的,而它工作的事实实际上是巧合。当这种事情发生时,编译器被允许破坏它。
    int ch;
    while( (ch = getchar()) != '\n' && ch != EOF ){;}
    getchar();
    
    char *mystrcat(char *dest, const char *src)
    {
        char *ret = dest;
    
        while(*dest) dest++;
        while((*dest++ = *src++));
    
        return ret;
    }
    
        char aa[] = "Studytonight ";
        char bb[] = "- Bestplace to learn";
        char cc[sizeof(aa) + sizeof(bb) - 1] = {0};
    
        #define STUDY "Studytonight "
        #define BEST "- Bestplace to learn"
    
        char aa[sizeof(BEST) + sizeof(STUDY) - 1] = STUSY;  //aa has enough space to accommodate both strings
        char bb[] = BEST;