我正在进行一项任务,我们必须从文件中读取一系列字符串到数组中.我必须在数组上调用密码算法(密码转换2D数组).所以,首先我把文件中的所有信息都放到了一个2D数组中,但是我在其余的代码中遇到了冲突类型的问题(特别是尝试将char []设置为char*).所以,我决定切换到一个指针数组,这使我的大部分代码都变得更容易.
但现在我需要将char*转换为char []并再次返回,但我无法弄明白.我一直无法在谷歌上找到任何东西.我开始怀疑它是否可能.
Tim*_*nes 102
听起来你在指针和数组之间感到困惑.指针和数组(在这种情况下char *和char [])不是一回事.
char a[SIZE]表示该位置的值a是一个长度数组SIZEchar *a;表示位置的值a是指向a的指针char.这可以与指针算法结合使用,就像一个数组(例如,a[10]在任何地方都是10个条目a)在内存中,它看起来像这样(例子来自FAQ):
char a[] = "hello"; // array
+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
char *p = "world"; // pointer
+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
很容易混淆指针和数组之间的区别,因为在很多情况下,数组引用"衰减"到指向它的第一个元素的指针.这意味着在许多情况下(例如传递给函数调用时)数组成为指针.如果您想了解更多信息,C FAQ的这一部分将详细介绍差异.
一个主要的实际区别是编译器知道数组有多长.使用上面的例子:
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)
Run Code Online (Sandbox Code Playgroud)
在没有看到你的代码的情况下,很难推荐最好的行动方案,但我怀疑改变使用指针到处可以解决你目前遇到的问题.请注意,现在:
您将需要在数组曾经存在的任何地方初始化内存.例如,char a[10];将成为char *a = malloc(10 * sizeof(char));,然后检查a != NULL.请注意,sizeof(char)在这种情况下,您实际上并不需要说,因为它sizeof(char)被定义为1.我将其保留为完整性.
您以前sizeof(a)用于数组长度的任何地方都需要替换为您分配的内存长度(如果您使用的是字符串,则可以使用strlen(),最多可以使用'\0').
您需要free()为每次通话拨打相应的电话malloc().这告诉计算机您使用了所要求的内存malloc().如果您的指针是a,只需free(a);在代码中的某个位置写入,您知道不再需要任何a指向.
正如另一个答案所指出的,如果你想得到一个数组开头的地址,你可以使用:
char* p = &a[0]
Run Code Online (Sandbox Code Playgroud)
你可以看这是"字符指针p变成一个元素的地址[0]的a".
dav*_*ave 14
如果你有,
char[] c
你可以做,
char* d = &c[0]
并通过做*(d+1),等等访问元素c [1] .
| 归档时间: |
|
| 查看次数: |
93798 次 |
| 最近记录: |