C中的字符串文字给出空值

String literal in C giving null value

我有这段代码。我试着用 C 语言 (gcc 8.3) 在 ideone 上 运行 它。

#include <stdio.h>
#include <string.h>

int main(void) {
    char* final;
    *final='a';
    *(final+1)='b';
    *(final+2)='c';
    *(final+3)='[=10=]'; //mark 2
    
    printf("final: %c \n",*final);
    printf("final: %c \n",*(final+1));
    printf("final: %c \n",*(final+2));
    
    printf("final all: %s \n",final); //mark 1
    return 0;
}

标记的第1行打印空值。

Output:
final: a 
final: b 
final: c 
final all: (null)

Q1。空值可能是什么原因?

Q2。如何打印正确的值,即 abc.

谢谢。

此外,标记 2 在这里没有任何区别。我知道我们在字符数组中使用它。我试着看看这是否有什么不同,但它仍然打印空值。

您通过使用未初始化的非静态局部变量 final 的值调用了 未定义的行为,这是不确定的。由于优化,前 3 printf()s 的输出似乎恰好是预期的。

通过分配一些内存来初始化变量。

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

int main(void) {
    char* final;
    final=malloc(4); /* allocate memory and assign */
    if(final==NULL) return 1; /* check if allocation succeeded */
    *final='a';
    *(final+1)='b';
    *(final+2)='c';
    *(final+3)='[=10=]'; //mark 2
    
    printf("final: %c \n",*final);
    printf("final: %c \n",*(final+1));
    printf("final: %c \n",*(final+2));
    
    printf("final all: %s \n",final); //mark 1
    free(final); /* free what is allocated */
    return 0;
}