理解指针和空终止字符串

时间:2016-06-21 23:33:08

标签: 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

似乎在字符串的开头删除了null值,而不是紧跟在字符串的后面。为什么呢?

1 个答案:

答案 0 :(得分:1)

这一行:

*c1++ = '\0';

确实

  1. 评估变量c1。它是指向4字节分配块的指针。

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

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

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

  5. 稍后,当您将2打印为字符串时,它会从您离开它的'\0'处开始,并以恰好位于最后一个字节的终止@keyframes slide { 0% { opacity: 0; -webkit-transform: translateX(70%); } 100% { opacity: 1; -webkit-transform: translateX(0%); } } @-webkit-keyframes slide { 0% { opacity: 0; -webkit-transform: translateX(70%); } 100% { opacity: 1; -webkit-transform: translateX(0%); } } 结束您分配的区域从未设置过。