繁体   English   中英

在C中解引用字符串指针

[英]Dereferencing string pointers in C

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

完全不同。

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

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

显然,地址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范围内。

也许您想将i替换为1。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM