处理char数组时处理NULL char的正确方法

时间:2014-11-09 00:33:20

标签: c arrays

当我们处理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”

1 个答案:

答案 0 :(得分:1)

问题在于想要处理它。没有必要这样做。 itoa函数为您执行此操作。存储在作为参数传递的数组中的字符串是NUL终止的。

小心,itoa不是标准功能,因此您的代码可能无法移植。你可以写一个自定义itoa。

现在,关于您的代码的几句话:

  1. 使用零填充数组可能会解决NUL问题,尽管这是不好的做法。管理来自该数组的数据的函数必须确保存在NUL终止符,而不管数组的内容如何(看看strcpy之类的函数)。

  2. 使用空格等字符填充数组毫无意义。

  3. 我不知道getValueS()正在做什么,但似乎它返回一个指向char的指针(至少你将结果分配给指向char的指针)。如果是这种情况,那么您对stringa所做的初始化是无用的,因为它会指向另一个内存位置(因此您无法再访问您的阵列)。

  4. 如果我的回答不够明确,请添加更多信息:发布完整代码,包括getValue()getValueS()和主要功能的声明。