【发布时间】:2015-10-07 03:37:03
【问题描述】:
我运行了以下代码,但它在 while 循环永远运行时崩溃了。当我调试这段代码时,我在*(pointer+cnt)='\0' 发现了问题;空字符永远不存在。我不知道如何在此处附加空终止符,以免程序崩溃。
#include <stdio.h>
#include <stdlib.h>
char* decimal_binary(int);
int main()
{
int n;
char *ptr=NULL;
printf("Enter the number\n");
scanf("%d",&n);
ptr=decimal_binary(n);
//printing out the characters
while(ptr!='\0')
{
printf("%c",*ptr);
ptr++;
}
free(ptr);
return 0;
}
char* decimal_binary(int n)
{
int c,d,cnt=0;
char *pointer=(char*)malloc(8+1);
if(pointer==NULL)
exit(EXIT_FAILURE);
for(c=7;c>=0;c--)
{
d=n>>c;
if(d&1)
*(pointer+cnt)=1+'0';
else
*(pointer+cnt)=0+'0';
cnt++;
}
//Null not getting added at the end of this sequence.Hence while loop in main runs forever.
*(pointer+cnt)='\0';
return pointer;
}
【问题讨论】:
-
*(pointer+cnt)的常规写法是pointer[cnt]。 -
你不能释放递增的指针;您必须释放
malloc()— 或calloc()或realloc()或……返回的内容。保留返回值的副本。 -
@ Jonathan..感谢您的回答,我意识到空字符('\0)和空指针之间的区别。有关释放指针的更正也有所帮助。
标签: c null-terminated char-pointer