我对 c/c++ 相当新手,当我遇到 this. 时,我试图确定终止字符串的最佳方法
我想我明白增加指针并将其取消引用为“\0”值是怎么回事。问题是,当我这样做时,它不起作用。
int main()
{
const char* c = "1234567890";
char* c1 = (char*) malloc(sizeof(char)*4);
strncpy( c1, c, 3 );
printf( "%s\n",c1 );
*c1++ = '\0';
printf( "%s\n",c1 );
}
输出是 123 23
看起来空值是在字符串的开头被删除的,而不是紧随其后。为什么?
最佳答案
这一行:
*c1++ = '\0';
是:
计算变量
c1
。它是一个指向已分配的 4 字节 block 的指针。使用
*
取消引用指针,该指针现在是c1
指向的第一个字节。将值
'\0'
分配给该字节,覆盖那里的'1'
。将 1 添加到
c1
。现在它指向您分配的 4 个字节中的第二个字节,其中包含'2'
。
稍后,当您将 c1
作为字符串打印时,它会从您离开的位置 2
开始,并以终止 '\0'
恰好位于从未设置的分配区域的最后一个字节中。
关于c - 理解指针和空终止字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956228/