我正在为我的问题寻找解决方案(这里是新手)。
我有一个字符串数组(char** arrayNum
),我想在第一个索引处存储该数组的元素数。
但我找不到将元素数量转换为字符串(或字符)的正确方法。
我已尝试itoa
,施放(char
),+'0'
,snprintf
......无效。
每次我在Stack Overflow上提问时,我都相信解决方案会很明显。在此先感谢您的帮助。
所以我填充了一个字符串数组char** arrayNum
,将索引0
留空。
当我尝试将字符串分配给arrayNum[0]
时:
这有效:arrayNum[0] = "blabla";
这不起作用:arrayNum[0] = (char) ((arraySize - 1)+'0');
我尝试了无数其他组合,我甚至都记得......
答案 0 :(得分:1)
arrayNum
可以被认为是一个字符串数组(char *
)。因此,您自然无法尝试将char
(或者除了char *
之外的任何类型)分配给此数组的元素。
我认为最好将数组的长度分别存储到数组中。例如,使用struct
。否则会引起混淆。
如果你真的,真的想在第一个元素中存储长度,那么你可以做类似的事情:
arrayNum[0] = malloc(sizeof(char));
arrayNum[0][0] = (char) ((arraySize - 1)+'0');
这利用了arrayNum
严格地是指针数组的事实,并且每个指针都是指向char
的指针。所以它可以指向一个字符或一个字符数组("字符串")。
将此与清晰度进行比较(比如说):
struct elements {
int length;
char **data;
};
答案 1 :(得分:1)
arrayNum
不是“字符串数组。”
以这种方式思考它可能是有用的,但重要的是要知道它到底是什么。它是一个指针数组,其中每个指针都是指向char
的指针。
有时指向char
的指针是“字符串”,有时它指向字符串的中间指针,有时它只是指向某处某个字符的指针。这一切都取决于你如何使用它。
C编程语言实际上没有字符串。它有字符串文字,但字符串文字只是一个const
字符数组,恰好以\000
结尾。您可以编写arrayNum[0] = "blabla";
的原因是因为字符串文字"blabla"
的值是指向“blabla”中第一个'b'
的指针,以及arrayNum
数组是指向字符的指针。
您有责任确定arrayNum[i]
是否指向某个字符串的第一个字符,或者它是否恰好指向某个字符;并且你有责任决定并跟踪它是否指向需要freed()
的东西,或者它是否指向只读内存,或它是否指向堆栈中的某些内容,或者它是否指向/进入一些静态分配的数据结构。
语言不关心。