将 malloc 用于 char 变量无法获取输入数据字符

using malloc for char variable can not take input data character

我正在尝试为 char 变量实现 DMA。但我无法接受意见。我尝试了所有我知道的可能情况:

//gets(ptr_name);
//scanf("%[^\n]", &ptr_name);
//fgets(ptr_name, name, stdin);

但是我什至不能输入字符变量的输入数据ptr_name。我想将输入作为“带 space 的字符串”作为输入值。如何解决这个问题呢? 然后如何在屏幕上打印输入的名字?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
  
int main()
{
    char* ptr_name;
    int name, i;
      
    printf("Enter number of characters for Name: ");
    scanf("%d",&name);
    
    ptr_name = (char*)malloc(name);
    
    printf("Enter name: ");  
    
    //gets(ptr_name);
    //scanf("%[^\n]", &ptr_name);
    //fgets(ptr_name, name, stdin);
                    
    printf("\n Your name is: ");   
         
    puts(ptr_name);  
            
    free(ptr_name);
    return 0;
}

scanf("%d", ...) 不消耗 enter 所以下一个 scanf() 得到一个空字符串。 您可以使用 getchar() 来消耗 enter.

此外,您需要为字符串/字符串终止符末尾的零分配额外的字节。请参阅 malloc() 中的 + 1

至于您的问题,您评论的 scanf() 在参数 2 之前有 &,这不是预期的(char **char *),但除此之外将允许字符串中有空格。 puts()会打印输入的名字,或者你可以修改上面的printf()来打印名字,例如:printf("\n Your name is: %s", ptr_name);

最后,请参考动态限制输入大小,避免缓冲区溢出。

免责声明:以下只是上述程序的“让它工作”版本,如果不适当检查 return 代码并限制输入大小,则不能用于现实生活:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char* ptr_name;
    int name, i;

    printf("Enter number of characters for Name: ");
    scanf("%d",&name);
    getchar();

    ptr_name = (char*)malloc(name + 1);

    printf("Enter name: ");

    scanf("%[^\n]", ptr_name);

    printf("\n Your name is: ");

    puts(ptr_name);

    free(ptr_name);
    return 0;
}

如果你想获得带空格的输入,你需要使用 getline():

getline(&buffer,&size,stdin);

这里有一个例子:

#include <stdio.h>
#include <stdlib.h>
    
int main()
{
    char* ptr_name;
    int len;
    printf("Enter number of characters for Name: ");
    scanf("%d",&len);
    ptr_name = (char*)malloc(len);
    printf("Enter name: ");
    getline(&ptr_name, &len, stdin);
    printf("\n Your name is: %s", ptr_name);
    
    free(ptr_name);
    return 0;
}