C语言中printf可以格式化输出各种类型的参数,但是这里是要记录自己忽略的一个问题。在项目我想输出打印字符串,但是打印的字符串为空,但是我能确保字符串并不是空的,因为我将字符串逐个能打印出来。开始以为是没有进行拷贝。于是,拷贝到另一个变量之后,打印出来的字符串还是空的。紧接着,我从字符串的第二位开始输出,发现能够打印到控制台中。仔细看我的字符串的第一个字符的十六进制为0x00,所以猜测在打印字符串
的时候,遇到‘\0',会直接结束打印。所以做以下的实验:
#include <stdio.h>
#include <string.h>
int main()
{
char str[10] = { 0 };
memcpy_s(str + 1, 10, "Hello", strlen("Hello"));
printf("the str is %s\n", str);
printf("the str is %s\n", str + 1);
return 0;
}
输出结果如下:
所以,以后输出字符串的时候,要注意到这个问题。