小编Cha*_*les的帖子

int/char数组/字符串之间的差异

我还是新来的论坛,所以我提前为论坛礼仪问题道歉.

我无法理解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中的字符串自动存储为数组还是可以这样做?

c arrays string int char

5
推荐指数
1
解决办法
4863
查看次数

无法在第一个地址之外访问malloc的内存

读取文件时,将为放置文件内容的字符串动态分配内存.这是在函数内部完成的,字符串作为传递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)

c malloc dynamic-memory-allocation

2
推荐指数
1
解决办法
1014
查看次数

标签 统计

c ×2

arrays ×1

char ×1

dynamic-memory-allocation ×1

int ×1

malloc ×1

string ×1