我还是新来的论坛,所以我提前为论坛礼仪问题道歉.
我无法理解int数组和char数组之间的差异.
我最近编写了一个Project Euler问题的程序,该程序最初使用一个char数组来存储一串数字,后来调用了特定的字符并试图int对它们使用操作来查找产品.当我使用char字符串时,我得到了一个非常大的产品,显然不正确.即使我将我认为将编译为character(str[n])的内容转换为整数in-line((int)str[n]),它也完全相同.只有当我实际使用整数数组时才有效.
代码如下
对于char字符串
char str[21] = "73167176531330624919";
Run Code Online (Sandbox Code Playgroud)
这没用.我得到了大约1.5万亿的答案,答案应该是大约40k.
对于int阵列
int str[] = {7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9};
Run Code Online (Sandbox Code Playgroud)
这是做了什么工作.我也脱掉了直列式铸造.
任何解释为什么这些事情有效/无效以及任何能够更好地理解这些想法的事情都将受到赞赏.有用的东西的链接也是如此.我自己研究了很多字符串,数组和指针(我在高中时就是自学),但这些概念仍然令人困惑.
边题,是C中的字符串自动存储为数组还是可以这样做?
读取文件时,将为放置文件内容的字符串动态分配内存.这是在函数内部完成的,字符串作为传递char **str.
使用gdb我发现在线路上产生了一个seg故障 **(str+i) = fgetc(aFile);
以下是$ gdb a.out core一些变量值的输出:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000000000400bd3 in readFile (aFile=0x994010, str=0x7ffd8b1a9338) at src/morse.c:59
59 **(str + i) = fgetc(aFile);
(gdb) print i
$1 = 1
(gdb) print **(str + 0)
$2 = 65 'A'
(gdb) print *(str + 0)
$3 = 0x994250 "A"
(gdb) print (str + 0)
$4 = (char **) 0x7ffd8b1a9338
(gdb) print **(str + 1)
Cannot access memory at address 0x0 …Run Code Online (Sandbox Code Playgroud)