我是C的新手。在阅读输入和指针时,我在理解一些基本材料方面遇到了一些麻烦。我想使用nextChar()函数来读取和打印我在命令行中输入的字符串的每个字符。我尝试输入“hello”..它显示“hello”6次。有人能告诉我为什么会这样吗?我该如何解决?谢谢你的时间!
#include <stdio.h>
#include <assert.h>
char nextChar(char* ptr)
{
static int i = -1;
char c;
++i;
c = *(s+i);
if ( c == '\0' )
return '\0';
else
return c;
}
void display(char* ptr)
{
assert(ptr != 0);
do
{
printf("%s", ptr);
} while (nextChar(ptr));
}
int main(int argc, const char * argv[])
{
char* ptr=argv[1];
display(ptr);
return 0;
}
答案 0 :(得分:3)
%s
格式说明符指示printf
打印字符数组,直到找到空终止符。如果要打印单个%c
,则应使用char
。如果这样做,您还需要使用nextChar
的返回值。
或者,更简单地说,您可以更改display
以直接迭代字符串中的字符
void display(char* ptr)
{
assert(ptr != 0);
do
{
printf("%c", *ptr); // print a single char
ptr++; // advance ptr by a single char
} while (*ptr != '\0');
}
或者,等效但指针运算不太明显
void display(char* ptr)
{
int index = 0;
assert(ptr != 0);
do
{
printf("%c", ptr[index]);
index++;
} while (ptr[index] != '\0');
}
答案 1 :(得分:1)
可以减少nextchar函数:
char nextChar(char* ptr)
{
static int i = 0;
i++;
return (*(ptr+i));
}
并显示到
void display(char* ptr)
{
assert(ptr != 0);
char c = *ptr;
do
{
printf("%c", c);
} while (c = nextChar(ptr));
}
答案 2 :(得分:1)
#include <stdio.h>
#include <assert.h>
char nextChar(const char* ptr){
static int i = 0;
char c;
c = ptr[i++];
if ( c == '\0' ){
i = 0;
}
return c;
}
void display(const char* ptr){
char c;
assert(ptr != 0);
while(c=nextChar(ptr)){
printf("%c", c);
}
}
int main(int argc, const char * argv[]){
const char* ptr=argv[1];
display(ptr);
return 0;
}