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