能否将字符串默认终止空字符'\0'改为'\1'等其他字符?
关于C语言字符串终止符的问题
首先明确:C标准里的字符串就是以'\0'(ASCII 0)作为终止符的字符序列,这是语言定义死的,没法修改标准库函数对终止符的判定逻辑——比如strlen()、printf("%s")这类标准函数,只会把第一个'\0'当作字符串的结束标志,你换成'\1'或者其他字符,这些函数根本不认。
但如果你自己实现字符序列的处理逻辑,完全可以自定义终止符:比如写个遍历函数,遇到'\1'就停止计数或停止输出,这时候你处理的是一个自定义规则的字符缓冲区,不是C标准意义上的字符串。
再看你写的代码:
#include<stdio.h> #include<string.h> int main(){ const char *str = "App\0le"; printf("%c", *(str+5)); }
字符串字面量"App\0le"在内存里的布局是:A p p \0 l e \0(最后那个'\0'是编译器自动给字符串字面量加的终止符)。虽然标准库函数会在第一个'\0'处停止,但内存里后面的l和e依然存在,所以你用指针偏移*(str+5)能直接访问到索引5的'e',这是正常的内存访问行为,和字符串终止符规则不冲突——你这里是直接操作内存地址,不是用标准字符串函数处理。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

