c - 理解指针和空终止字符串

标签 c string

我对 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';

是:

  1. 计算变量c1。它是一个指向已分配的 4 字节 block 的指针。

  2. 使用*取消引用指针,该指针现在是c1指向的第一个字节。

  3. 将值 '\0' 分配给该字节,覆盖那里的 '1'

  4. 将 1 添加到 c1。现在它指向您分配的 4 个字节中的第二个字节,其中包含 '2'

稍后,当您将 c1 作为字符串打印时,它会从您离开的位置 2 开始,并以终止 '\0' 恰好位于从未设置的分配区域的最后一个字节中。

关于c - 理解指针和空终止字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956228/

相关文章:

c - 为什么我会收到此错误 : dereferencing pointer to incomplete type

java - 字符串操作编码建议

c++ - STL find_if 和不区分大小写的字符串比较

c - 在 C 中打印和删除队列

c - 两个代码块有什么区别?

c - 如何计算C中 vector 的秩?

C编程,使用container_of()宏获取值时出错

c# - 在 C# 中的数组中搜索字符串的开头

python - 使用 Python 正则表达式切入模式

c++ - 如何修改函数中的字符串?