我在程序中尝试做的是反向将一个字符串的内容复制到另一个字符串。程序的这一部分有效。
但是,我不想限制输入的用户,所以我想使用 malloc 和 realloc。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
/*copy one string to another, in reverse*/
void copyStr(char *p, char *h){
int i=0,j=0;
int length=0;
length=strlen(p); int l=length;
for (i=0; i<length; i++){
h[i]=p[l-1];
l--;
}
char *temp=&h[0];
for (i=0; i<length; i++){
printf("%c",temp[i]);
}
}
main(){
printf("please enter a stringn");
char c; int i=0; int end=10;
/*allocate initial memory*/
char *p=(char*)malloc(sizeof(end)); char *temp=p;
while (c!='n')
{
/*reallocate if needed*/
if (i==(end-1)){
end*=2;
temp = realloc(p,end*sizeof(temp));
if (temp!=NULL){
/*this is for myself, to see what the error was*/
printf("error allocatingn");
exit(1);
}
else
free(p);
}
c=getchar();
p[i]=c;
i++;
}
char h [sizeof(p)];
copyStr(p,h);
}
我发现 realloc 功能不起作用,所以我正在寻求您的帮助。
如果输入非常短(即 3 个字符),程序将起作用。如果长度超过 10 个字母,则不会重新分配内存。如果它超过 5,它将反转打印,但会向我发送一条名为"堆栈粉碎"的消息。谢谢。
其实有一些
小技巧可以改变:
*temp=realloc(...
应该变得temp=realloc(...
temp!=NULL
是realloc()
的正常行为。- 如果您在之后使用它,请不要忘记在 realloc 操作后更改
p
。 -
sizeof(p)
是指针的大小,即 4 或 8...我把它变成了char h [sizeof(char)*(i+1)];
- 我还在字符串末尾添加了