使用C中的指针在字符串中扫描

kyl*_*yle 0 c string pointers scanf

可能重复:
动态字符串输入 - 使用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;
}
Run Code Online (Sandbox Code Playgroud)

如果我想修改名字会怎么样?我该怎么做呢?

编辑:我真的只是在寻找使用指针执行此操作的最有效和最正确的方法.我假设malloc是必要的.

MRA*_*RAB 5

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 当你扫描到固定大小的缓冲区时,总是给出一个最大大小以避免缓冲区溢出:`scanf("%255s",name);` (4认同)