首页 > 解决方案 > 我不明白为什么会出现这个问题

问题描述

由于它迟到了,我目前有点无脑,但我需要帮助理解为什么会出现这个问题。

我正在尝试制作一个运行批处理以“编译”带有图标的 ac 文件的可执行文件。

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

void batch(char *p) {
    char moduleName[_MAX_PATH];
    char tempPath[_MAX_PATH];
    char folder[_MAX_PATH];

    GetTempPath(_MAX_PATH, tempPath);
    strcat(tempPath, "b.bat");
    GetModuleFileName(NULL, moduleName, MAX_PATH);
    strcpy (folder, moduleName);
    
    char *pb = strrchr(folder, '\\');
    if(pb != NULL) *pb = 0;

    HANDLE hf;
    hf = CreateFile(tempPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if(hf != INVALID_HANDLE_VALUE) {
        DWORD len;
        char *bat;

        bat = (char*) alloca(strlen(p) + 
        strlen(moduleName) * 2 + strlen(tempPath) + 20);

        wsprintf(bat, p, moduleName, moduleName, folder, tempPath);

        WriteFile(hf, bat, strlen(bat), &len, NULL);
        CloseHandle(hf);

        ShellExecute(NULL, "open", tempPath, NULL, NULL, SW_HIDE);
    }
}

int main() {
    char c;
    printf("you want an icon? (y/n)");
    scanf(" %c", &c);

    char cName[64];
    printf("what is your c file name");
    scanf("%s", &cName);

    char exeName[64];
    printf("what do you want the exe name to be");
    scanf("%s", &exeName);

    if(c == "y") {
        printf("ONE");
        FILE *f;
        f = fopen("icon.txt", "w");
        fputs("MAINICON ICON \"icon.ico\"", f);
        fclose(f);
        sleep(1);
        rename("icon.txt", "icon.rc");
        sleep(1);
        batch("windres icon.rc icon.o");
        sleep(1);
        char buffer[128];
        sprintf(buffer, "gcc %s.c icon.o -o %s.exe", cName, exeName);
        batch(buffer);
        sleep(1);
        remove("icon.rc");
        remove("icon.o");
    } else {
        printf("TWO");
        char buffer[128];
        sprintf(buffer, "gcc %s.c -o %s.exe", cName, exeName);
        batch(buffer);
    }

    sleep(2);

    return 0;
}

在 if(c == "y") 之后,无论它是否实际上是 y,它都会打印“TWO”,并且似乎 if 语句是发生这种情况的唯一原因。

任何帮助表示赞赏。

标签: c

解决方案


您将 char c 与字符串“y”进行比较,这意味着您将存储在 c 中的 char 的 ascii 值与指向字符串“y”的指针进行比较。只需将您的代码更改为 'y' 字符,它将被修复。


推荐阅读