这是一项在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 loop)。
我解决了问题,但感觉不好,因为我使用数组来解决这个问题。
请帮帮我!谢谢。
***我问过如何使用指针变量才能表达(解决)上面的问题。
答案 0 :(得分:2)
首先,您将100的内存分配为随机值,希望它足够了。找到每个字符串的长度并为组合长度分配内存是一种更好的方法。
其次,使用r = p;
覆盖指向已分配内存的指针。您需要使用strcpy
将字符串从r
复制到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;
}
答案 1 :(得分:0)
问题是您正在覆盖
中malloc
返回的地址
if((r = (char *)malloc(100)) == NULL){
printf("Allocate failed\n");
exit(1);
}
r = p; /* Memory leak */
因此,您没有空间存储结果,请更改为
strcpy(r, p);
答案 2 :(得分:0)
可能低于答案就是你要找的。 p>
char *concate(char *p, char *q)
{
char *res = p;
while (*p)
*p++;
*p--;
while (*q)
{
*p++;
*p = *q;
*q++;
}
*++p = *q;
return res;
}
我们可以更优化它。 如果我错过了什么,请告诉我