可能重复:
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是必要的。
答案 0 :(得分:5)
name
是一个指针,&name
返回变量name
的地址,因此scanf
将您输入的名称放入指针本身。
例如,如果输入ABC
,则指针将为0x00434241(如果CPU为小端)或0x41434200(如果CPU为big-endian),其中0x41是'A的字符代码',0x42是'B'的字符代码等。
您应该分配可以存储输入名称的内存,然后将指针传递给scanf
。
以下是在堆栈上分配的示例:
#include <stdio.h>
#define MAX_NAME_LENGTH 256
int main (void) {
char name[MAX_NAME_LENGTH];
printf("Whats your name? ");
scanf("%s", name);
printf("\nyour name is %s", name);
return 0;
}
答案 1 :(得分:-1)
或者您也可以使用gets,以避免在有2个以上顺序输入的情况下使用标准输入缓冲区。
#include <stdio.h>
#define LENGTH 256
int main (void) {
char name[LENGTH];
printf( "Whats your name? " );
fgets( name, sizeof( name ), stdin );
printf( "\nYour name is %s", name );
return 0;
}