当我们处理c风格的字符串或字符数组时,有没有办法正确处理NUL字符?
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 0”
答案 0 :(得分:1)
问题在于你想要处理它。没有必要这样做。 itoa函数为您执行此操作。存储在作为参数传递的数组中的字符串是NUL终止的。
小心,itoa不是标准功能,因此您的代码可能无法移植。你可以写一个自定义itoa。
现在,关于您的代码的几句话:
使用零填充数组可能会解决NUL问题,尽管这是不好的做法。管理来自该数组的数据的函数必须确保存在NUL终止符,而不管数组的内容如何(看看strcpy之类的函数)。
使用空格等字符填充数组毫无意义。
我不知道getValueS()
正在做什么,但似乎它返回一个指向char的指针(至少你将结果分配给指向char的指针)。如果是这种情况,那么您对stringa
所做的初始化是无用的,因为它会指向另一个内存位置(因此您无法再访问您的阵列)。
如果我的回答不够明确,请添加更多信息:发布完整代码,包括getValue()
,getValueS()
和主要功能的声明。