如何解决如何为指针打印空终止符\ 0
在C语言中,您具有以下条件:
char * myString = "EMMA";
如何打印myString[4]
并获得\0
?
解决方法
0
是'\0'
的代码,由于在C char
类型实际上是int
类型,因此在这种情况下它们是相同的。
'\0'
是不可打印的字符,或者如果您希望使用不可打印的控制信号。
说您可以使用以下命令打印其代码:
printf("%d",myString[4]);
这当然会打印0
。
如果您要打印实际的'\0'
,可以在一个简单的条件下完成:
const char* nulchar = "\\0";
if(myString[4] == 0)
printf("%s",nulchar);
,
您需要编写自己的函数,以 C escape chars
的形式打印不可打印的字符。
void myprint(const char *str)
{
size_t n = 0;
do
{
printf("str[%4zu]=",n++);
switch(*str)
{
case '\0':
printf("`\\0`\n");
break;
case '\n':
printf("`\\n`\n");
break;
case '\r':
printf("`\\r`\n");
break;
case '\b':
printf("`\\b`\n");
break;
case '\t':
printf("`\\t`\n");
break;
case '\v':
printf("`\\v`\n");
break;
default:
if(isprint((unsigned char) *str))
printf("'%c'\n",*str);
else
printf("'\\x%02hhx'\n",*str);
}
}while(*str++);
}
int main(void)
{
myprint("Te\xf0st\t\n\r");
}
,
“我确实尝试过
%1$d
,但您得到空白。我的意思是,将“ get”打印到终端\ 0。
用%c
打印'\0'
总是没有可见的输出,因为%c
是一个转义序列,不可打印。
C标准保证每个字符串文字以NUL字节结尾:
在翻译阶段7中,一个或多个字符串文字产生的每个多字节字符序列将附加一个零值的字节或代码。
C18,第6.4.5 / 6条
实际上,您可以这样做
'\0'
或const char * myString = "EMMA";
fputs(myString,stdin);
puts("\\0");
变体:
printf()
如果您只想在字符串后打印出const char * myString = "EMMA";
printf("%s%s\n",myString,"\\0");
,并且在字符串文字\0
指向更改时也可以保持安全性。
输出(带有两个变体):
myString
,
简便方法:
write(1,myString + 4,1);
便携式方式:
fwrite(mystring + 4,1,stdout);
,
没有与终止符关联的可打印字符(这就是为什么将其用作终止符,它不是“正常”字符值)。
字符 '0'
具有非零编码(ASCII中为48)。
如果要在字符串后显示尾随0
或\0
,则需要使用一些技巧,如下所示:
printf( "%s\\%d\n",mystring,mystring[ strlen(mystring) ] );
应输出EMMA\0
。
在 %s
中使用 printf
为:
#include <stdio.h>
int main()
{
char * myString = "EMMA";
printf("myString[4]=%s",myString[4]);
return 0;
}
你得到:
myString[4]=(null)
但是...带有以下警告:
warning: format ‘%s’ expects argument of type ‘char *’,but argument 2 has type ‘int’ [-Wformat=]
所以,如果这只是一种快速而肮脏的方式来查看打印出的“NULL”,那就足够了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。