这是一个在 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;
覆盖指向已分配内存的指针。您需要使用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;
}
关于c - 我想问一下我失败的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279621/