代码给了我错误:增量操作数需要左值
但是如果我将str
加1,它必须指向字符串中的下一个字符。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[50];
scanf("%s", str);
while(*str != 0)
{
printf("%c", *str);
str++;
}
return 0;
}
答案 0 :(得分:3)
str
不是指针,而是数组。在许多情况下,数组会衰减为指向其第一个元素的指针,但这并不能使其本身成为指针。
答案 1 :(得分:2)
str
是一个50个元素的char数组,而不是一个指针。在大多数情况下,数组会衰减(转换为)指向第一个元素的指针,但是除非修改该指针,否则您不能修改该衰减的指针。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[50];
char* ptr = str;
scanf("%s", str);
while(*ptr != 0)
{
printf("%c", *ptr);
ptr++;
}
return 0;
}
正如Ulrich Eckhardt所指出的那样,一种更好的实现方法是使用for循环:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[50];
scanf("%s", str);
for(char* ptr = str; *ptr != 0; ++ptr)
{
printf("%c", *ptr);
}
return 0;
}
这样更清楚,ptr
的范围限于循环,这是很好的,因为我们以后不需要它。
答案 2 :(得分:-1)
您可以简单地将其用作数组
int i;
for (i=0; i<sizeof(str); i++)
{
printf("%c", str[i]);
}