在C中将指针转换回数组

时间:2011-12-15 01:27:52

标签: c string pointers

我有一个函数*getText(),其中最终结果是我需要从函数返回的数组。据我所知,这是不可能直接的,所以我创建了一个指针如下:

char *ptr = &plainText[0];
return ptr;

我还是C的新手并不熟悉指针,所以我创建了一些代码来将指针转换回我需要的函数中的数组:

int i;
char plainText[256];
for (i=0; *(getText()+i) == '\0'; i++){
    plainText[i] = *(getText()+i);
}

这里的想法是for循环将遍历指针指向的字符串,直到找到结束('\0'),并为每个字符添加字符串。

但是,虽然程序在gcc中编译时没有编译器错误,但是当它到达这段代码时,它会在没有任何运行时错误的情况下中止。

有人可以给我一些关于让它发挥作用的指导吗?

詹姆斯

5 个答案:

答案 0 :(得分:3)

如果仔细考虑一下,你会发现“将指针转换为数组”毫无意义

数组是一个连续的内存块你给了一个名字

指针是内存地址

您无法将指针转换为数组 - 您会如何突然将地址更改回内存块?您需要改为创建一个新块,并将其复制到那里。

当然,首先提供原始指针存在。在您的情况下,它似乎是一个本地数组,这意味着它在您尝试将其数据复制到另一个数组时会被销毁。

答案 1 :(得分:1)

也许您的意思是*(getText()+i) != '\0',否则您的循环条件将始终立即终止

答案 2 :(得分:1)

这太棒了。只是不要做任何你正在做的事情,退后一步,深呼吸......

需要返回数组的C函数通常只需将指针和最大大小作为参数,并写入该空间即可。例如,请参阅strncat

所有这些来回复制都应该是一个红旗,说明事情不对。 :)

答案 3 :(得分:0)

阅读一本好的C编程书。你会发现数组经常是(但并不总是被视为指针

您可能不希望在每次迭代时调用getText(),因此将其放入变量中。

您的测试应该是“不同的空字符”。

编译所有启用的警告并进行调试。在Linux上使用gcc表示gcc -Wall -g。了解如何在Linux上使用gdb之类的调试器。

答案 4 :(得分:0)

指向数组的指针与指向数组中第一个元素的指针相同。它只是一个地址值。

所以

char ch [10];

ch与& ch [0]

相同

现在您不需要任何此操作来复制以空字符结尾的字符串。只需使用strcpy()