我正在编写一个包含2个函数和一个main函数的C程序。第一个函数是&存储字符(更多描述包含在下面的注释中)。我不确定我是否正确终止了字符串(使用0)??
在此先感谢您的帮助!
#include <stdio.h>
#define MAX 20
/* reads a line from the keyboard and stores the characters in the array str.
If the user enters more than max characters, it returns -1. Function should terminate
the char array with a NULL (or 0) */
int getline(char str[], int max){
char c, i;
while((c = getchar()) != '\n'){
str[i] = c;
i = i + 1;
}
str[i] = '\0';
if (i < MAX)
return 0;
else
return -1;
}
/* calculates and returns the length of the array passed to it */
int strlen(char str[]){
int i = 0;
while(str[i] != NULL)
i++;
return i;
}
main(){
char str[MAX];
printf("Please Enter a String less than 20 characters:\n");
if((getline(str, MAX)) == 0)
printf("Length of ‘%s’ = %d", str, (strlen(str)));
else
printf("You Entered more than 20 Characters!");
}
答案 0 :(得分:1)
您必须在i
。
getline()
初始化为0
另一方面,getline()
的第二个参数是max
。但是你只在函数中提到了MAX
。幸运的是,由于唯一一个调用getline()
的地方使用MAX
作为第二个参数,因此您没有发现任何差异。此外,为了避免写出数组边界,你应该在循环之后检查循环中的数组索引而不是。
答案 1 :(得分:0)
在getline(char str[], int max)
您尚未初始化本地变量i
!