的printf((字符*)ⅰ);运行时错误? (ⅰ为整数)
-
21-09-2019 - |
题
在for循环中,我试图用printf打印电流i的值。这条线:printf((char *) i);
是给我运行时错误。这是为什么呢?!
下面是这样一个快速fizzbuzz溶液:
void FizzBuzz()
{
for (int i = 0; i < 20; i++)
{
printf((char *)i);
if ((i % 3 == 0) && (i % 5 == 0))
{
printf("FizzBuzz \n");
}
else if (i % 3 == 0)
{
printf("Fizz \n");
}
else if (i % 5 == 0)
{
printf("Buzz \n");
}
else
{
printf("%d\n", i);
}
}
}
解决方案
由于这不是printf
如何工作的。你想这个代替:
printf("%d\n", i);
甚至更好,
std::cout << i;
其他提示
如果您使用C ++,则应该使用COUT代替printf的:
#include <iostream>
using namespace std;
int main() {
int i = 42;
cout << "The answer is: " << i << endl;
}
通过这句话你告诉的是:“有一种刺痛起始地址为我,显示它”肯定不是你预期什么。使用格式字符串%d打印整数
printf的工作的方式是,它需要这样的字符串:
printf( "the number is: " );
如果您想要再在你需要使用转义字符,然后将字符串的最后一节的整数关口的int类型作为另一个paramater:
printf( "the number is %d", i );
有更多的信息这里的转义字符的就可以使用。
您还需要包括:
#include <stdio.h>
修改强>
对不起我的术语是错误的,随后的序列%被称为的转换规范强>不逃逸characer。
HTH。
printf()
的第一个参数是一个C语言风格的空终止字符串。它的意思被用作格式(因此“F”)与%
格式化序列打印剩余的参数。
通过使用printf((char *) i);
是指要求电脑打印的每一个字节开始在地址i
点,直到遇到一个空。不幸的是,由于i
通常用于计数器,它可能指向非常低的内存。大多数现代操作系统禁止访问从用户空间程序,以防止虫子从创建安全漏洞,例如内存,并会发送信号给得罪程序。到这样的信号的默认响应,除非你陷阱它,是杀死的过程。
要代替显示使用i
存储在printf("%d\n", i);
的数量,。要显示i
的值作为一个字符,尝试putc((char)i);
或printf("%c\n", i);
。如果真的i
是一个指向一个字符,尝试putc((char)(*i));
。
不隶属于 StackOverflow