1

可能重复:
动态字符串输入 - 使用 scanf(“%as”)
strcmp 和指针在 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 是必要的。

4

2 回答 2

6

name是一个指针,并&name返回变量的地址name,因此scanf将您输入的名称放入指针本身。

例如,如果您输入,ABC则指针将为 0x00434241(如果 CPU 是 little-endian)或 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;
}
于 2012-11-06T23:51:27.083 回答
-1

或者,您也可以使用获取,以避免在您有超过 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;
}
于 2012-11-06T23:56:19.343 回答