这里目标是打印输入的前n个字符,为啥只有部分能成功?(cprimer'的一个程序)
int* input()改成char* input()
int* pst改成char* pst
int ch[n]改成char ch[n]
就好了
int和char是不能安全转换的哦,换成char试一试吧
你要是想知道怎么改,看看他们的回答就行。你要是想知道为什么,倒是可以稍微说道说道。
正如楼上所言,int和char是不能安全转换的,至于为什么不能安全转换,我们可以来分析一下。
首先,可以肯定的是,C语言里char类型占一个字节。而int占几个字节就要具体问题具体分析了。
C语言标准是这样规定的:int最少16位(2字节),long不能比int短,short不能比int长,具体位长由编译器开发商根据各种情况自己决定。(也就是说short和int,或者int和long,原则上是允许是一样长的)
16位操作系统中,int 占16位(即2字节);在32位操作系统中,int 占32位(即4字节)。但是现在人们已经习惯了 int 占32位,因此在64位操作系统中,int 仍为32位。
你的电脑再怎么差也是也是32位,所以int应该是4字节没跑了。
你把1字节的char挨个放进4字节的int数组,然后想通过一个int指针把它挨个取出来,再放进putchar函数里输出,的确是很容易出问题的。
至于为什么会是现在这个结果,可能还得扒一下getchar和putchar的源代码分析分析。只要搞清楚它存放和读取的每一个细节,结果为什么会是这样,就能破案了。