在C中取消引用字符串指针

时间:2012-04-25 21:29:05

标签: c pointers

我是C的新手,我想知道以下两个代码段之间的区别。当我尝试执行第一个代码时,它工作正常,但是当我运行第二个代码时,它给了我分段错误。原因是什么这种行为?

        printf("%c\n",*strptr++);

        printf("%c\n",*(strptr+i));

以下是代码。

#include<stdio.h>

int main(void)
{
        char str[100]="My name is Vutukuri";
        int i=0;
        char *strptr;

        strptr=str;

        while(*strptr != '\0')
        {
                printf("%c\n",*strptr++);
                //printf("%c\n",*(strptr+i));
                //i++;
        }
        return 0;
}

3 个答案:

答案 0 :(得分:3)

完全不同。

第一个代码段会在strptr打印字符,然后将strptr增加一个。

第二个片段在strptr + i打印字符。

答案 1 :(得分:2)

显然,地址strptr指的是内存中已分配的位置,而strptr + i指向未分配的位置。如果您将字符串分配为

char s[LENGTH];

char* s = (char*)malloc(LENGTH * sizeof(char));

那么你只能使用从s[0]s[LENGTH - 1]的字符(并且字符串本身只能是LENGTH - 1长,所以有一个空终止符的位置)。在您的情况下,指针strptr + i可能不在s...s + LENGTH - 1范围内。

答案 2 :(得分:1)

也许你想用1代替我。

  • ++ operator首先使用初始值,然后递增它。
  • +运算符计算新值然后使用它。