【发布时间】:2012-11-06 23:39:09
【问题描述】:
可能重复:
Dynamic String Input - using scanf(“%as”)
strcmp with pointers not working in C
以下被认为是好的代码吗?我不应该在某处使用 malloc 吗?我能够编译它并且它工作,但我觉得它不应该。
#include <stdio.h>
int main (void) {
char *name;
printf("Whats your name? ");
scanf("%s", &name);
printf("\nyour name is %s", &name);
return 0;
}
如果我想修改名称会怎样?我该怎么做呢?
编辑:我真的只是在寻找使用指针的最有效和正确的方法。我假设 malloc 是必要的。
【问题讨论】:
-
这是一个非常糟糕的代码。我建议您首先了解 C 中内存分配的工作原理。您使用的是未初始化的指针。
-
1.不是重复的,我是另一张海报。类似的问题,但不一样。 2. 你对如何做有什么建议?我意识到这是错误的,但我似乎找不到好的解决方案。
-
比使用未初始化的指针更糟糕的是,您使用的是未初始化指针的地址。即使您分配了内存并将
name指向它,在scanf()和printf()调用上仍然是错误的。 -
你应该用一个定义的值初始化一个字符串,你也可以使用gets()来避免标准输入缓冲区
-
@LewsTherin 这与那个问题完全没有关系,这是关于自动分配内存的 glibc 功能(%as)。凯尔,一个问题是否重复与是谁提出的无关。