gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:50:22 25 4
gpt4 key购买 nike

这是一个在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com