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

时间:2012-11-06 23:39:09

标签: c string pointers scanf

  

可能重复:
  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是必要的。

2 个答案:

答案 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;
}