c - 为什么添加字符(来自 argv)会导致 C 中没有结果

标签 c argv

第一篇文章(如您所知)和表格告诉我,我的标题很糟糕,会被否决,但我不能做得更好:)我已经在这方面做了很多工作。

我正在尝试通过将命令行中给出的数字添加到字符串中来加密文本。

为什么

include <stdio.h>
int main(int argc, char * argv[])
{
    printf("%i", argc);
    char k = argv[1][0];
    printf("%c", k);
    char * s = "a";
    printf("%c", s[0] + 0);
}

正确打印“a”(除了打印argc和k) 但是当最后一行是

    printf("%c", s[0] + k);

它只打印 argc 和 k,然后什么也不打印。我希望它打印 20a (运行 ./question 0 时)。

(我尝试过

char k = 0;
char * s = "a";
printf("%c", s[0] + k);

这确实有效:( ) 看来 k 来自 argv 是问题所在,但我不知道为什么(并不是我真正理解这些) 谢谢!

最佳答案

argvargc 以及 "a" 都是转移注意力的东西。他们与这个问题无关。问题在于不理解两个字符值 '0'0 之间的区别(后者也称为 '\0' )。

为了理解其中的差异,我建议尝试这个程序:

#include <stdio.h>
int main(void) {
    char a = 'a', b = '0';
    printf ("as char: a=%c b=%c sum=%c\n", a, b, a+b);
    printf ("as int: a=%d b=%d sum=%d\n", a, b, a+b);
}

b使用不同的值,包括01'0'' 1' 看看会发生什么。

关于c - 为什么添加字符(来自 argv)会导致 C 中没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793697/

相关文章:

c - 没有段错误

c - 声明为 static const 的结构如何在 RAM 中结束? (在 C 中)

C - argv 存储随机值而不是给定值

c - argc、argv 及其用法的有趣观察

使用数组参数从 C 调用 Rust 方法

c - 如何解析 lambda 术语

command-line - Jython 2.5.1 : Calling From Java into __main__ - how to pass in command line args?

perl - 无法弄清楚如何在 perl 中修复此脚本

c - 在 UNIX 中使用 execve() 编写 ls 程序

c++ - 我无法读取 mft 并将 VB.net 转换为 C