在C中用0填充char

时间:2015-10-11 00:33:13

标签: c string char padding

我正在尝试将一定数量的零填充到char数组的开头,稍后将其作为整数读取。这是我的代码:

// charArray is '123' right now
// want charArray to be 00123
// Shift elements in array forward 'difference' times
// difference is amount of 0s to be padded to beginning of string, difference = 2 here
for (i = strlen(charArray) - 1; i >= 0; i--) {
    charArray[i+difference] = charArray[i];
}

这是我遇到问题的地方。以下代码的运行方式为charArray

??123

for (i = 0; i < difference; i++) {
    y[i] = 0 - '0';
}

如果我改为:

for (i = 0; i < difference; i++) {
    y[i] = 0;
}

我的字符串提前终止。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

要设置填充区域,只需使用以下代码:

for (i = 0; i < difference; i++) {
    charArray[i] = '0';
}

或可能:

memset(charArray, '0', difference);

答案 1 :(得分:0)

如果你最初分配的数组足够大,可以同时保存原始字符串,它的空终止符和填充,那么你可以这样做:

memmove(charArray+difference, charArray, strlen(charArray));
memset(charArray, '\0', difference);

如果要移动一个没有额外分配字节的字符串,那么某些字符将被删除。因此:

字符串移动N&#34;差异&#34;字节并用零填充前导空格

int original_array_size = strlen(charArray) + 1;
memmove(charArray+difference, charArray, original_array_size-difference);
memset(charArray, '\0', difference);
charArray[original_array_size - 1] = '\0'; // assumes original_array_size is >= 1

答案 2 :(得分:0)

所以问题是你正在设置的角色。在第一种情况下,使用y[i] = 0 - '0';,它将为您提供-48的字符值,它将是十六进制0xD0的字节。这是扩展的ascii范围内的一个角色,这就是为什么你在那里得到一个奇特的角色。

在第二种情况下,您使用y[i] = 0;这是一个零字节值,用作零终结符(因此提前终止字符串)。

您要使用的是y[i] = '0';