【发布时间】:2013-09-22 14:01:21
【问题描述】:
我有一个程序可以从命令行使用 argv 接受字符输入。我使用 strcpy 将输入 argv[1] 复制到已分配内存的名为 structptr 的指针(它从 struct 转到 structptr->words)。然后,我从指针 structptr 指向另一个指针的内存中逐个字符地复制该指针,该指针指向已分配的内存。在我复制了一个字符后,我打印该元素 [c] 以确保它已被正确复制(它具有)。然后我完成了所有字符的复制并将结果返回给一个字符指针,但由于某种原因它是空白/空。每次复制字符后,我都会检查前面的元素是否正确,但它们不再显示([c-2]、[c-1]、[c])。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct StructHolder {
char *words;
};
typedef struct StructHolder Holder;
char *GetCharacters(Holder *ptr){
int i=0;
char *words=malloc(sizeof(char));
for(i;i<strlen(ptr->words);i++){
words[i]=ptr->words[i];
words=realloc(words,sizeof(char)+i);
}
words[strlen(ptr->words)]='\0';
return words;
}
int main(int argc, char **argv){
Holder *structptr=malloc(sizeof(Holder));
structptr->words=malloc(strlen(argv[1]));
strcpy(structptr->words, argv[1]);
char *charptr;
charptr=(GetCharacters(structptr));
printf("%s\n", charptr);
return 0;
【问题讨论】:
-
你需要使用调试器。
-
我返回的结果指针似乎没有保存我从 ptr->words char by char 传输的内容。如果我在那一刻进行测试,它将显示 words[3] 打印 r 例如。如果我在那之前检查任何东西,什么都不会存在。当我返回指针并尝试在 main 中打印 charptr 时,我什么也没有得到或为 null。
-
您应该按照其他人的建议进行操作,只需使用 1 个 malloc 和一个 strcpy。但是,出于学术目的,您的代码中的错误是 words=realloc(words,sizeof(char)*(i+2))
-
sizeof(char)被定义为始终为1,因此在这种情况下无需使用它。如果您担心类型会在未来发生变化,您可以使用sizeof(*words)。
标签: c