C语言 为什么这个程序在我运行时崩溃



所以,我正在编写一个需要 3 个输入的程序,-r、-u 和 -l。每个输入使程序执行某个功能。-r 运行 rot_13 函数,-u 运行convert_all_upper函数,-l 运行convert_all函数。但是,当我运行程序并键入 -r 时,我得到的只是 Unix 中的banana$。关于我在这里看什么的任何想法?

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

FILE *
input_from_args(int argc, const char *argv[])
{
    if (argc == 1){
        return stdin;
    }
    else {
        return fopen(argv[1], "r");
    }
}
void
rot_13(FILE *src, FILE *dest)
{
    int c,j;
    while ((c = getc(src)) != EOF)
    {
    if(c>= 'A' && c <= 'Z')
    {
        if((j = c + 13) <= 'Z') 
            c = j;
        else
        {
            j = c - 13;
            c = j;
        }
    }
    else if(c >= 'a' && c <= 'z')
    {
        if((j = c + 13) <= 'z')
            c = j;
        else
        {
            j = c - 13;
            c = j;
        }
    }
    else
    c = c;
    fprintf(dest, "%c", c);
    }
}
void
convert_all_upper(FILE *src, FILE *dest)
{
    int c;
    while ((c = fgetc(src)) != EOF) 
    {
        fprintf(dest, "%c", toupper(c));
    }
}
void
convert_all_lower(FILE *src, FILE *dest)
{
    int c;
    while ((c = fgetc(src)) != EOF) 
    {
        fprintf(dest, "%c", tolower(c));
    }
}

int
main(int argc, const char *argv[])
{
    char answer[4];
    FILE *src = input_from_args(argc, argv);
    FILE *dest = stdout;
    printf("Please enter which conversion -r -u -ln"); 
    scanf("%s", answer);        

    if (src == NULL)
    {
        fprintf(stderr, "%s: unable to open %sn", argv [0], argv[1]);
        exit(EXIT_FAILURE);
    }
    if (answer == "-r")
    { 
        rot_13(src, dest);
    }   
    else if (answer == "-u")
    {
        convert_all_upper(src, dest);
    }           
    fclose(src);
    return EXIT_SUCCESS;
}

if (answer == "-r")

没有做你期望的事情。它只是比较两个指针,而不是字符串。

改变

if (answer == "-r")

if ( strcmp(answer, "-r") == 0 )

else if (answer == "-u")

else if ( strcmp(answer, "-u") == 0 )

确保添加

#include <string.h>

附言

如果您使用的是 gcc,您可以打开标志-Wall以获得非常有用的警告:

test-503.c:在函数"main"中:test-503.c:88:15:警告:与字符串文本比较会导致未指定的行为 [-Waddress]    如果(答案 == "-r")               ^test-503.c:93:20:警告:与字符串文本比较会导致未指定的行为 [-Waddress]    否则如果(答案 == "-u")

相关内容

  • 没有找到相关文章

最新更新