程序在C中的if语句之前关闭

时间:2018-10-26 17:28:39

标签: c

参数不能通过 if语句运行,我也不知道为什么。
在某些情况下,考虑到您对各大洲的预期寿命估算,该程序应该会给您“您还有几岁?”
输入的参数是:年龄,大陆和性别。当我执行它时,我要输入参数,然后它就停止工作了。

    xcopy /d "%SystemDrive%\clfiles\*xp18.tap" 
    "\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD

    \MS_PROBE_MACROS" /y

    ren \\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS_PROBE_MACROS\*xp18.tap "M*.tap"


    set Source="\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS_PROBE_MACROS"
    for %%e in (%Source%\M*.tap) do (
        set ProbeMacro=%%~ne
        set ProbeMacro=!ProbeMacro:~0,8!%
        del %Source%\!ProbeMacro!
    ren "%%~e" "!ProbeMacro!"
    )

1 个答案:

答案 0 :(得分:0)

您要将整个字符串存储在仅分配了单个字符的内存中。这是“缓冲区溢出”,并导致未定义的行为。

不要将它们分配为单个字符(类型char),而应尝试将它们分配为字符数组(例如unsigned char cont[128];)。我还建议使用fgets()进行字符串输入,而不是将scanf()与说明符一起使用%s

此外,请勿使用cont == America比较字符串。 strcmp()函数是完成此任务的正确工具。

最后,您永远不会将在此使用的变量定义为常量(例如America)。您需要定义America(变量)(也许是"America"),或者直接将cont与要测试的字符串进行比较(再次可能是"America")< / p>

int main(void) {
  const unsigned char *America="America";
  unsigned char cont[128];
  ...
  fgets(cont, 128, stdin);
  ...
  if (strcmp(cont, America) == 0) {
    ...
  }
  ...
}