这是我编写的一些代码,用来练习使用malloc().特别是,我希望有一个由用户给定的维度和元素组成的字符数组,并打印这些元素.

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

int main() {

    char *ptr;
    int d;
    
    printf("Inserire la dimensione dell'array CHAR:\n");
    scanf("%d", &d);
    
    ptr = (char *) malloc(d * sizeof(char));
    
    for (int i = 0; i < d; i++) {
    
        printf("Inserire un char:\n");
        scanf("%c", ptr[i]);
    
    }
    
    for (int j = 0; j < d; j++) {
    
        printf("%c", ptr[j]);
    
    }
    
    return 0;

}

编译器在第17:warning: fomat "%c" expects argument of type "char", but argument 2 has type "int"行给出警告.我在第17行try 了scanf("%c", &ptr[i]),这对我来说似乎也更自然,但代码运行得很糟糕.

推荐答案

&ptr[i]是正确的方式,至少它做了一些事情,即使有些事情是错误的.备选方案(ptr[i])什么也不做(或者更糟糕的是,它是未定义的行为,程序员应该在他们的代码中避免这种行为).第一个代码运行不好的原因是您必须在输入字符后键入Enter.第二个scanf将读取该条目.要"使用"此Enter和任何其他空格字符(以及您在输入数组长度时键入的Enter),只需以scanf格式添加一个空格:

scanf(" %c", &ptr[i]);

C++相关问答推荐

了解一些CLIPS原语数据类型

是否定义了数组指针类型转换为指针类型?""""

需要大整数和浮点数.使用long long int和long double

如何在C宏中确定Windows主目录?

Can函数指针指向C++中具有不同参数连续性的函数

将常量转换为指针会增加.数据大小增加1000字节

当我更改编译优化时,相同的C代码以不同的方式运行

在C++中通过空指针隐式访问常量变量的值

在 struct 中强制转换空指针

C中函数类型的前向声明

函数的限制限定指针参数允许优化调用方函数吗?

为什么指针运算会产生错误的结果?

是否需要包括<;errno.h>;才能使用perror?

如何只获取字符串的第一个单词,然后将其与c中的另一个单词进行比较?

添加函数会 destruct 嵌入式C代码(无IDE)

';\n&39;和';\r&39;中的';\n&39;之间有什么关系?

将 struct 数组写入二进制文件时发生Valgrind错误

将char*数组深度复制到 struct 中?

C语言程序流程解释

文件指针引起的C程序分段错误