1

我有一个简单的 C 函数,我有一个用户提供路径名,该函数检查它以查看它是否是有效文件。

# include <stdio.h>
# include <string.h>

int main(void) {

    char  cFileChoice[256];
    FILE * rInputFile;
    unsigned int cFileLength;

    printf("\nPlease supply a valid file path to read...\n");

    fgets(cFileChoice, 255, stdin);
    cFileLength = strlen(cFileChoice) - 1;

    if (cFileChoice[cFileLength] == "\n") {
        cFileChoice[cFileLength] = "\0";
    }
    rInputFile = fopen(cFileChoice, "r");
    if (rInputFile != NULL) {
        printf("Enter 'c' to count consonants or enter 'v' for vowels: ");
    }
    else {
        printf("Not a valid file\n");
    }
    return 0;
}

仅在运行此文件后,无论它是否是有效路径,文件都会返回无效。我已删除该newline字符\n并将其替换为 anull terminator \0但是,它仍然无法识别正确的路径。

我对 C 的经验很少,我不确定我应该在哪里纠正这个问题?

编辑:

这些是我收到的编译警告:

test.c: In function ‘main’:
test.c:15:34: warning: comparison between pointer and integer [enabled by default]
     if (cFileChoice[cFileLength] == "\n") {
                                  ^
test.c:16:34: warning: assignment makes integer from pointer without a cast [enabled by default]
         cFileChoice[cFileLength] = "\0";
                              ^

同样,我不确定如何纠正这些“警告”?

4

1 回答 1

3

"\n"并且"\0"是字符串文字(并且"\0"是一个特别奇怪的字符串文字)。您想与字符文字进行比较:'\n''\0'.

=在第二次比较中,您还需要一个单曲==(应该与 比较的那个'\0')。

您应该阅读comp.lang.c常见问题解答第 8 节,字符和字符串

于 2013-05-28T20:11:20.567 回答