C:只打印一定数量字符的程序
我正在开发一个程序,当由用户输入的数字指定时,该程序将只打印出该数量的字符。例如,如果用户输入数字10,则如果输入14个字符(包括换行符、空格和制表符),则仅打印10个字符。我的代码似乎适用于前三个左右的字符,然后打印出垃圾。我不确定出了什么问题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;
#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时,程序将跳过,直到程序结束,而不允许用户输入任何内容。