我的功能和主要方法有什么问题?

时间:2014-03-18 00:13:57

标签: c function return printf getline

我正在编写一个包含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!");
}

2 个答案:

答案 0 :(得分:1)

您必须在i

中将getline()初始化为0

另一方面,getline()的第二个参数是max。但是你只在函数中提到了MAX。幸运的是,由于唯一一个调用getline()的地方使用MAX作为第二个参数,因此您没有发现任何差异。此外,为了避免写出数组边界,你应该在循环之后检查循环中的数组索引而不是

答案 1 :(得分:0)

getline(char str[], int max)

您尚未初始化本地变量i