2009-12-02 59 views
1

如果我有一个指向字符串某处的指针,让我们假设它指向第三个字母(我们不知道字母的位置,基本上我们不知道它是第三个字母),我们希望它指向第一个字母,这样我们可以使字符串变为NULL,我们该怎么做?c中的指针(如何指向字符串中的第一个字符,指针指向同一字符串中的其他位置)

例如:

如果我们有ascii作为一个指针 ascii指向字符串中某处现在,我希望它在字符串我如何做到这一点的第一个字符点?

(注: 我试着说

int len = strlen(ascii); 
ascii -= len; 
ascii = '0'; 

,但它不能正常工作,它改变的地方指针为0,而不是第一个字符为0)

回答

12

你不能。 C和C++遵循“无隐藏成本”规则,这意味着除了别的之外,没有其他人会为您隐藏指向您字符串开头的指针。另一个常见的事情是数组大小;你也必须自己储存它们。

+0

所以如果你有一个指向字符串某处的指针,你可以使它指向该字符串的第一个字符? – user220755 2009-12-02 00:23:57

+1

假设你知道你在做什么索引。如果您不知道字符串有多长时间,请不要,因为没有指示字符串开头的标记。 – Donnie 2009-12-02 00:27:07

+0

但你可以分配给指针。如果你有另一个指针已经指向你的字符串的开始,你可以执行'ascii = beginning_of_string'。我这样说是因为你似乎错过了第三行的取消引用:'* ascii'会访问指向的东西; 'ascii'会访问指针本身。 – aib 2009-12-02 00:30:58

1

首先,在代码中,如果ASCII是为char一个指针,这应该是

* ASCII = '\ 0';

不是你写的。您的代码将指针本身设置为字符'0'。这意味着它指向一个不好的地方!

其次,strlen返回您指向的字符串的长度。想象一下这个字符串有10个字符长,并且你指向第三个字符。 strlen将返回8(因为前两个字符已从计算中删除)。从您指向的位置减去此值将指向6个字符之前字符串的起始位置。画一张照片帮助看到这一点。

恕我直言,没有一些其他信息,它是不可能实现你想要做的。

从上面我说的,你应该能够找出你需要做什么,只要你保持字符串的原始长度,例如。

0

不可以,但是,您可以将它指向字符串的最后一个字符,即在每个字符串的'\ 0'之前(它被称为零终止的字符串)。

你可以做的是,而不是一个字符*你可以使用指向一个结构的指针,其中包含你需要的信息和字符串。

-1

它不能保证能够正常工作,但是你可能不会保留备份,直到找到空字符,然后向前移动。

while(*ascii) ascii--; 
ascii++;