我正在做一项任务,我们必须将文件中的一系列字符串读入array.我必须调用数组上的密码算法(密码转置2D数组).因此,一开始我将文件中的所有信息放入一个2D数组中,但是我在代码的睡觉中遇到了很多冲突类型的问题(特别是试图将char[]设置为char*).因此,我决定切换到指针数组,这使得我的大部分代码中的所有事情都变得容易得多.
但是现在我需要将char*转换为char[],然后再转换回来,但是我无法计算出来.我在谷歌上找不到任何东西.我开始怀疑这是否可能.
我正在做一项任务,我们必须将文件中的一系列字符串读入array.我必须调用数组上的密码算法(密码转置2D数组).因此,一开始我将文件中的所有信息放入一个2D数组中,但是我在代码的睡觉中遇到了很多冲突类型的问题(特别是试图将char[]设置为char*).因此,我决定切换到指针数组,这使得我的大部分代码中的所有事情都变得容易得多.
但是现在我需要将char*转换为char[],然后再转换回来,但是我无法计算出来.我在谷歌上找不到任何东西.我开始怀疑这是否可能.
听起来你好像把指针和数组搞混了.指针和数组(在本例中是char *
和char []
)是not the same thing.
char a[SIZE]
表示位置a
处的值是长度为SIZE
的数组char *a;
表示a
位置处的值是指向char
的指针.这可以与指针算术相结合,以表现为一个数组(例如,a[10]
是超过a
点的10个条目)在内存中,它看起来如下所示(取自the FAQ的示例):
char a[] = "hello"; // array
+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
char *p = "world"; // pointer
+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+
指针和数组之间的区别很容易混淆,因为在许多情况下,数组引用"衰减"到指向其第一个元素的指针.这意味着在许多情况下(例如当传递给函数调用时),数组成为指针.如果你想知道更多,this section of the C FAQ describes the differences in detail.
一个主要的实际区别是编译器知道数组的长度.使用上面的示例:
char a[] = "hello";
char *p = "world";
sizeof(a); // 6 - one byte for each character in the string,
// one for the '\0' terminator
sizeof(p); // whatever the size of the pointer is
// probably 4 or 8 on most machines (depending on whether it's a
// 32 or 64 bit machine)
在没有看到代码的情况下,很难推荐最佳的操作方案,但我怀疑在任何地方使用指针都能解决您当前遇到的问题.现在请注意:
您需要在数组以前所在的位置初始化内存.例如,char a[10];
将变成char *a = malloc(10 * sizeof(char));
,然后勾选a != NULL
.请注意,在本例中实际上不需要输入sizeof(char)
,因为sizeof(char)
被定义为1.为了完整起见,我保留了它.
以前数组长度为sizeof(a)
的任何地方都需要用分配的内存长度替换(如果使用字符串,则可以使用strlen()
,计数为'\0'
).
每次拨打malloc()
,你都需要相应地拨打free()
.这会告诉计算机您已经使用了malloc()
所要求的内存.如果指针是a
,只需在代码中知道不再需要a
所指向的位置处编写free(a);
即可.
正如另一个答案所指出的,如果您想要获取数组开始的地址,您可以使用:
char* p = &a[0]
您可以将其理解为"字符指针p
成为a
的元素[0]
的地址".