繁体   English   中英

如果在将值分配给其内存位置后指针增加会发生什么?

[英]What will happen if pointer is incremented after assigning value to its memory location?

考虑下面的例子,

#include <stdio.h>

int main()
{
    char charArr[3] = "c++";
    char *pointer = charArr;
    pointer+=3;
    *pointer = 'q';
    pointer+=1;
    *pointer = 'd';
    printf("%s", charArr);
    return 0;
}

我希望我能得到, c++qd但我得到了c++r

q 的值增加 1 并变为 'r',我尝试了其他增量,它按照 ASCII 反映。

charArr只够容纳它初始化的三个字符。 该数组不能包含任何其他字符,它甚至没有用于终止空字节的空间以使其成为正确的字符串。

这意味着您正在写入数组的末尾。 这样做会调用undefined behavior ,在这种情况下表现为意外输出。

该数组的长度应至少为 6 个字节,以便它可以容纳附加字符和一个终止空字节以使其成为字符串。 您还需要添加该空字节。

char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;

指针只是指出位置,您输入的数据空间较小,因此只需先增加 char 数组的长度,然后再进行处理,但是您的指针运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM