指针字符串未返回预期输出 #包括 void revstr(char str[]) { 焦炭温度; int size=0; 而(*str!='\0'){ 大小++; str++; } 对于(int i=0;i
为什么我的rev字符串没有打印字符串的反面,而是打印出一些垃圾值。 你能指出原因吗?在这个while循环之后指针字符串未返回预期输出 #包括 void revstr(char str[]) { 焦炭温度; int size=0; 而(*str!='\0'){ 大小++; str++; } 对于(int i=0;i,c,pointers,reverse,c-strings,function-definition,C,Pointers,Reverse,C Strings,Function Definition,为什么我的rev字符串没有打印字符串的反面,而是打印出一些垃圾值。 你能指出原因吗?在这个while循环之后 #include <stdio.h> void revstr(char str[]) { char temp; int size = 0; while(*str != '\0'){ size++; str++; } for
#include <stdio.h>
void revstr(char str[])
{
char temp;
int size = 0;
while(*str != '\0'){
size++;
str++;
}
for (int i = 0; i < size/2; i++)
{
temp = str[i];
str[i] = str[size-1-i];
str[size-1-i] = temp;
}
for(int i = 0; i < size; i++)
{
printf("%c\n", *(str+i));
}
}
int main()
{
char str[20];
printf("enter a string: \n");
scanf("%s", &str);
revstr(str);
return 0;
}
指针str不指向字符串的开头
相反,你可以写一些例子
while(*str != '\0'){
size++;
str++;
}
然而,这样的函数应该只做一件事:反转字符串。函数的调用方决定是否输出反向字符串
所以函数可以看起来像
while( str[size] != '\0'){
size++;
}
这是一个演示程序
puts( revstr( str ) );
当然,您可以使用标准字符串函数strlen
,而不是while循环
Hello
olleH
请注意scanf
size_t n = strlen( s );
第二个参数应为表达式str
scanf("%s", &str);
在这个while循环之后
#include <stdio.h>
void revstr(char str[])
{
char temp;
int size = 0;
while(*str != '\0'){
size++;
str++;
}
for (int i = 0; i < size/2; i++)
{
temp = str[i];
str[i] = str[size-1-i];
str[size-1-i] = temp;
}
for(int i = 0; i < size; i++)
{
printf("%c\n", *(str+i));
}
}
int main()
{
char str[20];
printf("enter a string: \n");
scanf("%s", &str);
revstr(str);
return 0;
}
指针str不指向字符串的开头
相反,你可以写一些例子
while(*str != '\0'){
size++;
str++;
}
然而,这样的函数应该只做一件事:反转字符串。函数的调用方决定是否输出反向字符串
所以函数可以看起来像
while( str[size] != '\0'){
size++;
}
这是一个演示程序
puts( revstr( str ) );
当然,您可以使用标准字符串函数strlen
,而不是while循环
Hello
olleH
请注意scanf
size_t n = strlen( s );
第二个参数应为表达式str
scanf("%s", &str);
我会以另一种方式实施:
scanf("%s", str);
我将以另一种方式实现它:
scanf("%s", str);
在代码中,您将指针str向前移动以计算其长度,但之后忘记将其重置为起始位置。此外,您对scanf的呼叫应该传递str,而不是其地址。此外,如果用户输入的字符串长度超过19个字符,scanf将在str结尾之外写入。请尝试以下方法:
int main(void)
{
char s[] = "Hello world";
printf("%s\n", reverse(s));
}
#包括
#包括
void revstr(char str[])
{
焦炭温度;
int size=strlen(str);
对于(int i=0;i
在代码中,您将指针str向前移动以计算其长度,但之后忘记将其重置为起始位置。此外,您对scanf的呼叫应该传递str,而不是其地址。此外,如果用户输入的字符串长度超过19个字符,scanf将在str结尾之外写入。请尝试以下方法:
int main(void)
{
char s[] = "Hello world";
printf("%s\n", reverse(s));
}
#包括
#包括
void revstr(char str[])
{
焦炭温度;
int size=strlen(str);
对于(int i=0;i
在scanf中(“%s”、&str)也可以正常工作,这没有问题。问题是在while循环中,我更改了str的地址。谢谢您的帮助ans@nabeelkhan如果某个东西按预期工作,则表示它不正确。@nabeelkhan在我的函数中,while这个词有一个拼写错误。我更新了代码。@nabeelkhanscanf(“%s”和&str)
绝对不起作用。当您执行回显“这是一个相对较长的字符串”|/a.out
时会发生什么情况?(提示,行为未定义)。你想要if(scanf(“%19s”,str)==1{…}
我想,你是使用&str
还是str
是一个品味问题,但str
绝对是首选。最终,代码将被修改,str
将被分配到堆上,突然,&str
的所有用法都将出错。在scanf中(“%s”,&str)也工作正常,这没有问题。问题是在while循环中,我更改了str的地址。谢谢您的帮助ans@nabeelkhan如果某个东西按预期工作,则表示它不正确。@nabeelkhan在我的函数中,while这个词有一个拼写错误。我更新了代码。@nabeelkhanscanf(“%s”和&str)
绝对不起作用。当您执行回显“这是一个相对较长的字符串”|/a.out
时会发生什么情况?(提示,行为未定义)。你想要if(scanf(“%19s”,str)==1{…}
我想,你是使用&str
还是str
是一个品味问题,但str
绝对是首选。最终,代码将被修改,str
将被分配到堆上,突然,&str
的所有用法都将出错。***void revstr(char str[])
不是可剪切粘贴的代码。如果您提供易于使用的代码示例,则更有用。***void revstr(char str[])
不是可剪切粘贴的代码。如果你愿意,它会有用得多