指针、字符和malloc

指针、字符和malloc,c,pointers,char,scanf,C,Pointers,Char,Scanf,我对以下代码有问题: int main(void) { char *pointer; int num, i; printf_s("Enter number of elements: "); scanf_s("%d", &num); pointer = (char*) malloc(sizeof(char) * num); for (i = 0; i < num; i++, pointer++) scanf_s(" %c", pointer); pointer -= num;

我对以下代码有问题:

int main(void)
{
char *pointer;
int num, i;
printf_s("Enter number of elements: ");
scanf_s("%d", &num);
pointer = (char*) malloc(sizeof(char) * num);
for (i = 0; i < num; i++, pointer++)
    scanf_s(" %c", pointer);
pointer -= num;
for (i = 0; i < num; i++)
printf_s("%c", *(pointer + i));
free(pointer);
return 0;
}
int main(无效)
{
字符*指针;
int num,i;
printf_s(“输入元素数:”);
scanf_s(“%d”和&num);
指针=(char*)malloc(sizeof(char)*num);
对于(i=0;i
代码相当简单,我只想打印我刚输入的字符。相反,它不打印任何内容/空白。我做错了什么?

更改:

scanf_s(" %c");
致:

当你在做这件事的时候(尽管与手头的问题没有直接关系),摆脱
malloc

int main(void)
{
    char c;
    scanf_s("%c", &c);
    printf_s("%c", c);
    return 0;
}

避免使用
malloc
(即使巴拉克的答案是正确的)

#包括
#包括
#包括
内部主(空)
{
字符x;
扫描频率(“%c”和“&x”);
printf_s(“%c”,x);
返回0;
}

除了已经给出的建议之外

以下内容来自scanf_s的
scanf_s

与scanf和wscanf不同,scanf_s和wscanf_s要求为包含在[]中的c、c、s、s或字符串控制集类型的所有输入参数指定缓冲区大小

对于字符,单个字符可按如下方式读取:

char c;
scanf_s("%c", &c, 1);

任何关于
malloc
的原因?@Ed Heal:是的,在我提交那张便条之前,我收到了通知(虽然与问题没有直接关系)。谢谢,但是如果我想创建一个数组,比如n个元素,我们知道它是像“指针=(char*)malloc(sizeof(char)*n)”那样完成的。我使用for循环输入元素,但问题仍然存在。另外,我希望scanf中有一个指针变量(不是常规变量),这样我输入的字符就会放在指针指向的地方,然后打印出来。@MoSFeT如果你想要一个
N
字符的数组,为什么不在堆栈上声明这样的数组呢(其中
n
仅在运行时计算),然后是-您需要使用
malloc
。但是,这里不是这种情况,因为您只有一个字符。关于您的另一个问题-
scanf
在任何情况下都会使用地址(无论您是声明
char c
并使用
&c
调用
scanf
,还是声明
char*p
并使用
p
调用
scanf
)。非常感谢,这解决了问题。但是,如果我使用for循环输入,比如说3个元素,我应该将缓冲区大小设置为3吗?
printf(输入元素数:“);scanf_s(“%d”和&num);pointer=(char*)malloc(sizeof(char)*num);for(i=0;i
由于一次转换一个字符,缓冲区大小应指定为1,
scanf_s(“%c”,pointer,1)
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>


int main(void)
{
    char x;
    scanf_s("%c", &x);
    printf_s("%c", x);
    return 0;
}
char c;
scanf_s("%c", &c, 1);