字符串的 C 打印导致奇怪的字符
C printing of string is resulting in weird characters
我正在尝试通过以下方式输出一个 int:
void the_int(int i)
{
int lenghtOfInt = 0;
int tempValue = i;
while(tempValue >= 1)
{
tempValue/=10;
lenghtOfInt++;
}
int currentDigit;
char string[lengthOfInt];
while(i>9)
{
currentDigit= i % 10;
i = i/10;
char ch = (char)(((int)'0')+currentDigit);
string[lengthOfInt--] = ch;
}
string[lengthOfInt]= (char)(((int)'0')+i);
function(str); //prints the string character by character
}
如果我在 i = 12 的情况下尝试这个函数,我会得到 à12ç。我做错了什么?
加入 21 世纪并使用std::string
.
您正在访问下一行中的数组边界之外。
string[lengthOfInt--] = ch;
这会尝试访问不正确的索引lengthofInt
。
现在,忽略带有变量的数组声明,
char string[lengthOfInt];
声明具有从 0
到 lengthofInt - 1
的索引的数组
此外,根据打印字符串的方式,末尾可能需要"\0"字符。虽然,如果你逐个角色地走,并且确定你的界限,那么它不是必需的,但仍然建议这样做。
C 中的所有字符串都必须以 nul 字节 (0) 结尾。 因此,首先将 1 添加到您在堆栈上分配的 char 数组的长度,然后在打印之前将 nul 字节添加到字符串中。
我认为这是一个家庭作业练习。 否则,您应该只使用 itoa
函数。
忽略使用
变量声明数组的事实(您应该使用动态分配或至少使用常量),char string[lengthOfInt];
需要char string[lengthOfInt+1];
并且您需要在 while 循环之前string[lengthOfInt] = ' ';
。C 字符串以 NULL 结尾。
此外,为什么不直接printf("%d", i);
?
相关文章:
- 无符号字符打印其 ASCII 值
- 我正在尝试为字符打印一些相应的值,但条件总是转到其他位置
- 为什么完整的字符串没有一次打印,但是当我尝试逐个字符打印时
- 延迟逐个字符打印单词
- C++:如何将 unicode 字符打印到文本文件
- 为什么 std::hex 没有特别用字符打印为十六进制?
- 使用 C++ 将 UTF8 字符打印到 Linux 控制台
- 如何在Windows上正确地将拉丁字符打印到C++控制台
- 使用线程根据起始字符打印出单词
- 每隔n个字符打印一行换行符
- C++奇怪的字符打印到屏幕上
- 将字符打印为整数
- C++ 将文本文件的单个字符打印到屏幕
- C++递归字符打印
- 使用WritePrinter API将中文字符打印到Line Printer
- c++ Unicode字符打印
- 将UTF-32字符打印到终端
- 使用cout将数组和字符打印到屏幕时出现意外结果
- 为重复字符打印星号的算法
- 用于循环字符打印