Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:只打印一定数量字符的程序_C_Arrays - Fatal编程技术网

C:只打印一定数量字符的程序

C:只打印一定数量字符的程序,c,arrays,C,Arrays,我正在开发一个程序,当由用户输入的数字指定时,该程序将只打印出该数量的字符。例如,如果用户输入数字10,则如果输入14个字符(包括换行符、空格和制表符),则仅打印10个字符。我的代码似乎适用于前三个左右的字符,然后打印出垃圾。我不确定出了什么问题 #include <stdio.h> #include <stdlib.h> void findchars(char *abc, int number); int main(void) { char *array;

我正在开发一个程序,当由用户输入的数字指定时,该程序将只打印出该数量的字符。例如,如果用户输入数字10,则如果输入14个字符(包括换行符、空格和制表符),则仅打印10个字符。我的代码似乎适用于前三个左右的字符,然后打印出垃圾。我不确定出了什么问题

#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();
    }

}
#包括
#包括
无效findchars(字符*abc,整数);
内部主(空)
{
char*array;//实际数组
int num;//要读取的字符数,成为数组值
printf(“字符数:”);
scanf_s(“%d”和&num);
数组=(char*)malloc(num*sizeof(char));
findchars(数组,num);
printf(“前%d个字符:”,num);
放置(数组);
自由(数组);
返回0;
}
无效findchars(字符*abc,整数)
{
int i;
printf(“键入字符,我将在%d:,编号处停止);
对于(i=0;i
您正在将非零终止数组传递给puts。如果希望程序正常工作,只需将数组1项创建得更大,并在最后添加“\0”

编辑:像这样

array = (char *)malloc((num+1) * sizeof(char));
然后就在放置之前:

array[num] = '\0'; 

您正在将非零终止数组传递给puts。如果希望程序正常工作,只需将数组1项创建得更大,并在最后添加“\0”

编辑:像这样

array = (char *)malloc((num+1) * sizeof(char));
然后就在放置之前:

array[num] = '\0'; 


put
获取字符串。你没有给它一个字符串。不要强制转换
malloc
。而且,
sizeof(char)
的定义是1。
abc
没有
NULL
终止。C中的字符串必须以“\0”字符结尾。您没有为所需的字符串终止符分配足够的空间,也没有写入所需的字符串终止符。此外,您可能也在阅读每一个
新行
留下一个
换行符
getchar()读取在您的函数中。使用printf(“前%d个字符:,num”)宣布结果
不打印任何
\n
换行符,但如果查看程序的输出,它已移动到下一行。
put
获取字符串。你没有给它一个字符串。不要强制转换
malloc
。而且,
sizeof(char)
的定义是1。
abc
没有
NULL
终止。C中的字符串必须以“\0”字符结尾。您没有为所需的字符串终止符分配足够的空间,也没有写入所需的字符串终止符。此外,您可能也在阅读每一个
新行
留下一个
换行符
getchar()读取在您的函数中。使用printf(“前%d个字符:,num”)宣布结果
不打印任何
\n
换行符,但是如果您查看程序的输出,它已移动到下一行。您好!谢谢你的帮助!我将你的代码添加到我的代码中,效果很好,但它仍然跳过最后一个字符。请参阅上面关于换行符的注释。我这样做了,它仍然跳过最后一个字符。示例输出如下:我应该读多少个字符:7(换行符)开始输入字符,我将在7:he(换行符)Ll o(换行符)您键入的前7个字符是:he(换行符)Ll只有一个想法需要验证-如果您使用Windows,换行符是2个字符。我认为这可能是换行符的问题。当我输入要读取的字符数为1时,程序将跳过,直到程序结束,而不允许用户输入任何内容。嗨!谢谢你的帮助!我将你的代码添加到我的代码中,效果很好,但它仍然跳过最后一个字符。请参阅上面关于换行符的注释。我这样做了,它仍然跳过最后一个字符。示例输出如下:我应该读多少个字符:7(换行符)开始输入字符,我将在7:he(换行符)Ll o(换行符)您键入的前7个字符是:he(换行符)Ll只有一个想法需要验证-如果您使用Windows,换行符是2个字符。我认为这可能是换行符的问题。当我将要读取的字符数输入为1时,程序将跳过,直到程序结束,而不允许用户输入任何内容。