You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将单引号作为命令行参数传入,终端卡住问题求助

问题:无法将单引号作为命令行参数传入C程序

我无法将单引号(')作为命令行参数传入自己编写的C程序,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned int ascii_values (const char *word);
int main (int argc, char *argv[])
{
    if (argc < 2)
    {
        printf("Usage: ./ascii WORD\n");
    }
    for (int i = 1; i < argc; i++)
    {
        int ascii = ascii_values(argv[i]);
        printf("The ascii value is %i\n", ascii);
    }
}

unsigned int ascii_values (const char *word)
{
    int l = strlen(word);
    int ascii = 0;
    for(int i = 0; i < l; i++)
    {
        ascii = word[i];
    }
    return ascii;
}

当我在终端输入命令:./ascii ' 时,终端会卡在 > 状态,无法得到预期输出 The ascii value is 39.,请问这是什么原因?


原因与解决方法

1. 终端卡住的核心原因

这和C程序本身无关,是Shell的引号语法规则导致的:
在Bash等常见Shell中,单引号是定义字面量字符串的边界符,Shell会把你输入的'判定为未闭合的引号,因此进入多行输入等待状态(显示>提示符),直到你输入配对的闭合单引号才会执行命令。

2. 正确传入单引号的几种方法

要把单引号作为命令行参数传给程序,可用以下几种方式:

  • 方法一:反斜杠转义单引号
    输入命令:./ascii \'
    反斜杠会告知Shell,后续的单引号是普通字符,而非边界符。
  • 方法二:双引号包裹单引号
    输入命令:./ascii "'"
    双引号内部的单引号会被Shell当作普通字符解析。
  • 方法三:闭合单引号拼接转义单引号
    输入命令:./ascii ''\'''
    利用Shell字符串拼接规则:先闭合空单引号,转义中间的单引号,再闭合空单引号,最终拼接出单个单引号字符。

3. 程序的额外逻辑问题

你的ascii_values函数存在逻辑缺陷:循环中每次都会用当前字符的ASCII值覆盖ascii变量,最终只会返回输入字符串最后一个字符的ASCII值。
如果需求是获取单个字符的ASCII值,可简化为直接返回word[0](需先判断字符串非空);如果是计算所有字符的ASCII值之和,应将ascii = word[i]改为ascii += word[i]。

内容的提问来源于stack exchange,提问作者Alex Sugimoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:16:35