我是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;
}
答案 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代替我。