C语言动态内存打印问题
这个代码是运用动态内存知识实现对输入的字符串反向打印的功能,请问为什么我打印出来之后永远多一个% 在后面呀 一脸新手懵逼{:10_277:}#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int countp = 0;
char *get_reverse(void);
void printc(char *p, int count);
int main(void)
{
char *p = NULL;
p = get_reverse();
printc(p, countp);
return 0;
}
char *get_reverse(void)
{
char ch;
char *p = NULL;
char *dp = NULL;
int count = 0, i = 0;
printf("Please enter char:");
while((ch = getchar()) != '\n')
{
count++;
p = (char *)realloc(p, count);
p = ch;
}
dp = (char *)malloc(count + 1);
dp = '\0';
countp = count;
for(i = 0; count > 0; i++, count--)
{
dp = p;
}
free(p);
return dp;
}
void printc(char *p, int count)
{
int i;
printf("Reversed char is:");
for(i = 0; i < count; i++)
{
printf("%c", p);
}
putchar("\n");
}
dp = (char *)malloc(count+1); -》 dp = (char *)malloc(count);
putchar('\n');
你是按字符数输出,反向后也没有加'\0'。倒是接收时加了'\0'。不理解何意,也就是说你接收时也可以不用加'\0' putchar 函数用于输出单个字符,而不是字符串。
在C语言中,字符串是以 '\0' (空字符)结尾的字符数组
使用 putchar("\n") 时,编译器会给出一个警告,因为试图将字符串而不是单个字符传递给 putchar。
正确的方式是使用 putchar('\n') 来输出一个换行符,或者您可以使用 printf("\n")。
void printc(char *p, int count)
{
int i;
printf("Reversed char is:");
for(i = 0; i < count; i++)
{
printf("%c", p);
}
printf("\n"); // 或者 putchar('\n');
}
ba21 发表于 2023-11-15 18:22
dp = (char *)malloc(count+1); -》 dp = (char *)malloc(count);
谢谢老哥指正的其他问题{:10_279:} 不二如是 发表于 2023-11-15 21:16
putchar 函数用于输出单个字符,而不是字符串。
在C语言中,字符串是以 '\0' (空字符)结尾的字符数组
...
谢谢不二师兄一语点破,果然改完就好了{:10_327:}
页:
[1]