2016-11-26 29 views
0

我正在处理的程序中,当由用户输入的数字指定时,将只打印出该数量的字符。例如,如果用户输入数字10,那么如果输入14个字符(包括换行符,空格和制表符),则只会打印10个字符。我的代码似乎适用于前三个字符,然后打印出垃圾。我不确定什么是错的。C:只打印一定数量的字符的程序

#include <stdio.h> 
#include <stdlib.h> 

void findchars(char *abc, int number); 

int main(void) 
{ 
    char *array; // the actual array 
    int num; // number of characters to read, becomes array value 

    printf("Number of characters:"); 
    scanf_s("%d", &num); 

    array = (char *)malloc(num * sizeof(char)); 

    findchars(array, num); 

    printf("The first %d characters: ", num); 

    puts(array); 

    free(array); 

    return 0; 
} 

void findchars(char *abc, int number) 
{ 

    int i; 

    printf("Type characters and I will stop at %d: ", number); 

    for (i = 0; i < number; i++) 
    { 
     abc[i] = getchar(); 
    } 

} 
+0

'puts'接受字符串。你没有给它一个字符串。 – melpomene

+0

不要施放'malloc'。此外,根据定义,“sizeof(char)'是1。 – melpomene

+0

'abc'不是'NULL'终止。 C中的字符串必须以'\ 0'字符结尾 –

回答

2

您正在将非零终止数组传递给puts。如果你想让你的程序工作,只需要创建一个大的数组,并在最后加上'\ 0'。

编辑:这样

array = (char *)malloc((num+1) * sizeof(char)); 

,然后puts前右:

array[num] = '\0'; 
+0

我该如何编码?我对C.非常陌生。 – Markovnikov

+0

嗨!谢谢你的帮助!我给你添加了代码,它可以正常工作,但它仍然会跳过最后一个字符。 – Markovnikov

+0

请参阅上面有关换行符的注释 – aragaer