我正在尝试将一定数量的零填充到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;
}
我的字符串提前终止。有什么想法吗?
答案 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';