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;
}
我有这段代码。我试着用 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;
}