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

Sna*_*yes 2 c string printf pointers scanf

我写了一个C程序,它从用户那里获取一个字符串输入并将其打印在屏幕上.

int main (void)
{
    char* string;
    scanf("%s", string);
    printf("%s", string);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是输出是不可取的.

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

Har*_*ris 5

char* string;
Run Code Online (Sandbox Code Playgroud)

这只是指向a的指针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;
}
Run Code Online (Sandbox Code Playgroud)

或者,使用数组

#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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Haris你得到一个`+`:).广告`exit(1);`如果`malloc()`失败. (2认同)