c - (null) 在打印字符串时正在打印

标签 c string pointers printf scanf

我写了一个 C 程序,它接受用户输入的字符串并将其打印在屏幕上。

int main (void)
{
    char* string;
    scanf("%s", string);
    printf("%s", string);
    return 0;
}

但输出并不理想。

我输入了 foo。程序打印出 (null)。谁能解释为什么?

最佳答案

char* string;

这只是一个指向char 的指针。它还没有指向任何内存。您需要为您希望它保存的字符分配内存。


您可以使用 malloc() 分配内存

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

int main(void){
    char *string;
    string = malloc(100); //string of length 100

    if(string == NULL){
        printf("Error\n");  //if malloc() fails
    }

    if((scanf("%99s", string)) != 1){ //if scanf() fails
        printf("Error, Fix it!\n");
        exit(1);
    }
    printf("%s\n",string);

    free(string);
    return 0;
}

或者,使用数组

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

int main(void){
    char string[100];

    if((scanf("%99s", string)) != 1){
        printf("Error, Fix it!\n");
        exit(1);
    }
    printf("%s\n",string);

    return 0;
}

关于c - (null) 在打印字符串时正在打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626231/

相关文章:

c - Ruby-FFI 在包装以大写字母开头的函数时生成常量?

c - 如何打印用户的主目录#c

python - 提高 Python + numpy 数组分配/初始化性能

javascript将字符串转换为带括号的int数组

C - 将结构设置为 null(赋值中的类型不兼容)

从 C 中的索引构造字符串

c# - 使用 C# 将代码(以类 C 或类 Lisp(或任何)语言编写)解析为数组的好方法?

java字符串连接

c - 无法从函数中释放指针

c++ - 指针段错误问题