将 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;
}
我正在尝试为 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;
}