c - 我不明白为什么会出现这个问题
问题描述
由于它迟到了,我目前有点无脑,但我需要帮助理解为什么会出现这个问题。
我正在尝试制作一个运行批处理以“编译”带有图标的 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 语句是发生这种情况的唯一原因。
任何帮助表示赞赏。
解决方案
您将 char c 与字符串“y”进行比较,这意味着您将存储在 c 中的 char 的 ascii 值与指向字符串“y”的指针进行比较。只需将您的代码更改为 'y' 字符,它将被修复。
推荐阅读
- python - 每次使用 docx 添加新数据时清除首页
- c# - .netcore 在空闲后重置已注册的单例服务
- r - 闪亮的服务器下的 X11 错误消息,但普通用户可以工作
- angular - Angular ngAfterContentInit :我们在谈论什么内容
- python - 改变随机森林中每棵树的权重
- sql-server - 在子句查询 SQL 服务器中结合 OR 和 AND
- firebase - 调用 firebase 函数导致内部错误
- rest - 我们可以将 Rest Assured API 测试脚本与 Jmeter 集成吗?
- c++ - 有没有办法将数据直接编码到硬盘驱动器(类似于如何使用 RAM)?
- html - 响应式和居中的 iFrame