在处理char数组时处理NULL char的正确方法
问题描述:
有没有办法在处理c样式字符串或char数组时正确处理NUL字符?在处理char数组时处理NULL char的正确方法
int myint;
char stringa[4];
memset(stringa, 0x0, 4);
memset(stringa, ' ', 3);
stringa = getValueS();
myint = getValue();
char stringint[4];
memset(stringint, 0x0, 4);
memset(stringint, ' ', 3);
itoa(myint, stringint, 10);
char finals[7];
memset(finals, 0x0, 7);
memset(finals, ' ', 6);
memcpy(&finals[3], stringint, 3);
memcpy(&finals[0], stringa, 3);
决赛给出 “0”
stringint给出 “0”
stringa给出 “0”
预期收益 “0”
答
的问题是,你想要处理它。这是没有必要的。 itoa函数为你做这个。存储在数组中的字符串作为参数传递NUL终止。
小心,itoa不是一个标准函数,所以你的代码可能不是可移植的。你可以写一个自定义itoa。
现在,关于你的代码的几句话:
用零填充可能会解决这个问题NUL阵列,虽然是不好的做法。管理该阵列中的数据的功能必须确保存在NUL终止符,而不管阵列的内容如何(请参阅strcpy之类的函数)。
用空格填充字符没有意义。
我不知道
getValueS()
在做什么,但它似乎返回一个指向char的指针(至少你将结果赋给一个指向char的指针)。如果是这样的话,您对stringa
所做的初始化是无用的,因为它会指向另一个内存位置(因此您不能再访问您的阵列)。
如果我的回答不够清晰,请添加更多的信息:发布完整的代码,包括的声明getValue()
,getValueS()
和主要功能。
“0”!= NULL。 ''\ 0''是char数组中的空字符,不能打印出来,因为它是一个NULL字符 - 没有什么可打印的。 – 2014-11-09 00:35:40
你的意思是“0x0”!= NULL? – lock 2014-11-09 00:37:26
是的,这正是我的意思。字符数组中的NULL字符是'\ 0',就像我在上一条评论中所写的那样。我不确定我在这里不清楚。 '0x0'!='\ 0',要么。 '((0x0 == 0)&&(0x0!='\ 0'))' – 2014-11-09 00:38:20