Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-字符到ASCII:';a';打印为6_C_Ascii - Fatal编程技术网

C-字符到ASCII:';a';打印为6

C-字符到ASCII:';a';打印为6,c,ascii,C,Ascii,我一直在尝试将C中的字符转换为ascii。我注意到,当输入像“a”这样的字符而不是程序打印“a”,97时,它会打印6,54。出于某种原因,它把我输入的“a”作为6,我不知道为什么 代码如下 #include <stdio.h> #define MAX 100 int main(int _nArgs, char _cArgs[MAX]) { printf("%c, %i", _cArgs[1], _cArgs[1]); return 0; } #包括 #定义最大

我一直在尝试将C中的字符转换为ascii。我注意到,当输入像“a”这样的字符而不是程序打印“a”,97时,它会打印6,54。出于某种原因,它把我输入的“a”作为6,我不知道为什么

代码如下

#include <stdio.h>

#define MAX 100

int main(int _nArgs, char _cArgs[MAX])
{
    printf("%c, %i", _cArgs[1], _cArgs[1]);

    return 0;
}
#包括
#定义最大值100
int main(int nArgs,char cArgs[MAX])
{
printf(“%c,%i”,_-cArgs[1],_-cArgs[1]);
返回0;
}

正如前面的评论所说,
主函数的签名是错误的。您应该定义
main
,如下所示:

int main(int argc,char**argv)
{
//您的应用程序代码
返回0;
}
< > >代码> INT/COM>的返回类型不是编译器强制执行的。空V>代码>通常也被接受(关于SO、<代码> GCC 和<代码> CLAN< /代码>的长讨论都接受了;C++要求<代码> int <代码>返回类型为<代码>主< /代码>)。使用
void
返回类型是一种不好的做法(如注释中所述),因此请坚持使用
int


但是
main
采用的参数要么是
void
,要么是
int
char**argv
(相当于
char*argv[]
)的组合。因此,
main
的第二个参数缺少另一个间接级别,它应该是指向
char
的指针。解决了这个问题,您就没事了,尽管将
main
的第二个参数声明为固定大小数组对我来说非常奇怪,我不建议这样做。此外,请尝试遵守
argc
argv
的命名约定,因为这是人们在阅读代码时所期望的。

您错误地定义了
main
函数

您可以将
main
定义为:

int main(void) {
    /* ... */
}
或作为

或等效的(或以某种实现定义的方式,但不必担心)

您已经将
main
的第二个参数定义为
char
的数组,该数组被调整为
char*
类型。它需要是
char**
char*[]
。(声明中的
MAX
被悄悄忽略。)

您可以对参数使用任何您喜欢的名称,但是
argc
argv
是常规的,没有理由使用任何其他名称

一旦解决了这个问题,就可以将第一个命令行参数的第一个字符引用为
argv[1][0]
。(
argv[0]
指向表示程序名称的字符串。)


您应该在输出的末尾打印一个换行符
\n

您需要
argv[1][0]
。。。在修复了
main
的签名后,我觉得这不是有效的
main
。你为什么这样写?你想要
intmain(intargc,char**argv)
。我看到了投票结果接近的原因,但不是反对票。问题很清楚(即使OP有点困惑),包括MCVE。我见过更糟的。欢迎新的贡献者。您应该始终打开编译器警告。不,
void
不好。一些编译器可能会允许它,甚至可能会记录他们允许它,但是
void main
是不可移植的,并且没有很好的理由使用它。此外,数组“基本上”不是指针;数组根本不是指针,但我并不是说数组就是指针。我正试图向OP解释错误是什么。显然,我们这里讨论的是数组参数,数组作为指针传递给函数。我敢肯定,如果对这样一个基本问题的答案吹毛求疵,在任何层面上都是有帮助的。
int main(int argc, char *argv[]) {
    /* ... */
}