C 中带指针的自定义 concat 函数

标签 c string pointers

我尝试在没有库的情况下用 C 编写自己的串联函数,但我遇到了问题,我不知道它来自哪里。 为了完成我的功能,我使用 char 指针。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int longueur(char *str)
{
    int i =0;
    while(str[i] != '\0')
    {
        i++;
    }
    return i;
}

void concat(char* source, char* dest)
{
    int longStr1 = (longueur(source));
    int longStr2 = (longueur(dest));
    int i=0, j=0;
    char* temp = dest;
    free(dest);
    dest = (char*) realloc(dest, ((longStr1 + longStr2)* sizeof(char)));

    /*dest[0] = temp[0]; <------  If I do this it will generate issue, so the bellow code too*/
    while(temp[i] != '\0')
    {
        dest[i] = temp[i];
        i++;
    }
    while(source[j] != '\0')
    {
        dest[i] = source[j];
        i++;
        j++;
    }
   dest[i] = '\0';
}

int main()
{
    char *str1 = "World";
    char *str2 = "Hello";
    concat(str1, str2);
    printf("-------------\n%s", str2);
    return 0;
}

编辑

我阅读了您的所有答案,因此我将 concat 函数更改为:

void concat(char* source, char* dest)
{
    int longStr1 = (longueur(source));
    int longStr2 = (longueur(dest));
    int i=0, j=0;

    dest = (char*) malloc((longStr1 + longStr2)* sizeof(char) + sizeof(char));

    while(dest[i] != '\0')
    {
        dest[i] = dest[i];
        i++;
   }
   while(source[j] != '\0')
   {
       dest[i] = source[j];
       i++;
       j++;
   }
   dest[i] = '\0';
}

现在我没有问题,但我的代码只显示“Hello”

最佳答案

除了所有好的评论和解决方案之外:realloc 可以给你一个不同的指针,你必须返回该指针。所以你的函数签名应该是:

void concat(char* source, char** dest)
{
    int longStr1 = (longueur(source));
    int longStr2 = (longueur(dest));
    int i=0, j=0;
    char* temp = *dest, *temp2;
    if ((temp2 = realloc(dest, ((longStr1 + longStr2)+1))==NULL) return;
    *dest= temp2;

    while(temp[i] != '\0')
    {
        *dest[i] = temp[i];
        i++;
    }
    while(source[j] != '\0')
    {
        *dest[i] = source[j];
        i++;
        j++;
    }
   *dest[i] = '\0';
}

..并且这假设该函数将使用通过malloc分配的dest来调用。并且 sizeof(char) 始终为 1。(这个结果函数不是最佳的。)

--编辑--

下面是正确的优化版本:

void concat(char* source, char** dest)
{
    int longSrc = longueur(source);
    int longDst = longueur(dest);
    char *pDst, *pSrc;

    if ((pDst = realloc(*dest, longSrc + longDst + 1))==NULL) return;

    if (pDst != *dest) *dest= pDst;

    pDst += longSrc;
    pSrc= source;

    while(pSrc)
        *pDst++ = *pSrc++;

    *pDst = '\0';
}

关于C 中带指针的自定义 concat 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114599/

相关文章:

c - 将静态库链接到可执行文件

c - 如何减慢C中代码的执行速度?

string - 高效截断字符串复制 `str` 到 `[u8]`(utf8 识别 strlcpy)?

c - 按特定顺序对 argv 进行排序

c - printk中如何使用回车符

c - 这个 << 语句是什么意思?

python - 如果部分字符串重复,则从列表中删除元素

java - HttpServletRequest.getParameter() 接收 "\r\n"用于 textarea 字段中的每一行

c++ - memcpy 中的指针运算有奇怪的结果

c - C中的指针数组?