0

我是 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;
}
4

3 回答 3

3

完全不同。

第一个片段打印字符 atstrptr然后递增strptr1。

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

于 2012-04-25T21:33:21.683 回答
2

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

char s[LENGTH];

或者

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

那么您只能使用s[0]to的字符s[LENGTH - 1](并且字符串本身只能很LENGTH - 1长,因此可以使用空终止符)。在您的情况下,指针strptr + i可能不在范围内s...s + LENGTH - 1

于 2012-04-25T21:37:12.377 回答
1

也许您想将 i 替换为 1。

  • ++ 运算符首先使用初始值,然后将其递增。
  • +operator 计算新值,然后使用它。
于 2012-04-25T21:33:55.833 回答