c - 我想问一下我失败的代码

标签 c

这是一个在 21 天内自学 c 的练习。

问题是:编写一个接受两个字符串的函数。使用malloc()函数分配足够的内存来容纳连接后的两个字符串。返回指向这个新字符串的指针。

所以,我编写了第一个代码。但不操作。代码中的函数如下:

 char *concate(char *p, char *q)
 {
    int i, len;
    char *r;

    if((r = (char *)malloc(100)) == NULL){
        printf("Allocate failed\n");
        exit(1);
    }


    r = p;
    for(i = 0; r[i] != '\0'; ++i)
            ;
    len = i;
    for(i = 0; q[i] != '\0'; ++i, ++len)
         r[len] = q[i];

    return r;
}

没有编译错误,但运行时错误。

因为我只想使用指针变量来解决这个问题。

但我不知道,使用下面的代码解决了问题。

char *concate(char *p, char *q)
{
    int i, len;
    char *r;

    if((r = (char *)malloc(1000)) == NULL){
        exit(1);
     }

    for (i = 0; p[i] != '\0'; ++i)
        r[i] = p[i];

    len = i;

    for(i = 0; q[i] != '\0'; ++i, ++len)
        r[len] = q[i];

    r[len] = '\0';


    return r;
}

这段代码可以运行,并且可以得到我想要的结果。

我的问题是,我怎样才能只使用指针变量得到结果?

我想使用*p, *q, *r和指针算术和一些变量(i for 循环)。

我解决了问题,但感觉不太好,因为我使用数组来解决这个问题。

请帮助我!谢谢。

***我问如何只使用指针变量来表达(解决)上面的问题。

最佳答案

首先,您将 100 的内存分配为随机值,希望它足够。找到每个字符串的长度并为组合长度分配内存是一种更好的方法。

其次,您将使用 r = p; 覆盖指向已分配内存的指针。您需要使用strcpyr 复制字符串至p .

这是一个仅使用指针的解决方案

char *concate(char *p, char *q)
{
    int i, len=0, ;
    char *r, *temp;

    temp = p;
    for(; *temp ; ++temp)
            len++;
    temp = q;        
    for(; *temp ; ++temp)
            len++;

    if((r = malloc(len+1)) == NULL){
        printf("Allocate failed\n");
        exit(1);
    }

    for (temp = r; *p; p++, temp++)
       *temp = *p;

    for (; *q; q++, temp++)
       *temp = *q;

    *temp = '\0'; 

    return r;
}

关于c - 我想问一下我失败的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279621/

相关文章:

c - 使用 sleep() 时,timer_getoverrun() 的行为不符合预期

python - 如何在 C 程序中启动 Python 解释器

c - 两个链表的合并功能不起作用

c - 如果在参数列表中使用了另一个类型定义的名称,则发出警告

c - 简单C题

c - valgrind,总堆使用量不断增加

c - union 的这种行为背后的逻辑是什么?

c - SDL2 tilemap - 太慢

c - qsort 比较器函数不会对整个数组进行排序(留下 1 个元素)

c - 在循环内分配的变量有效,在循环外则无效。为什么?