Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针字符串未返回预期输出 #包括 void revstr(char str[]) { 焦炭温度; int size=0; 而(*str!='\0'){ 大小++; str++; } 对于(int i=0;i_C_Pointers_Reverse_C Strings_Function Definition - Fatal编程技术网

指针字符串未返回预期输出 #包括 void revstr(char str[]) { 焦炭温度; int size=0; 而(*str!='\0'){ 大小++; str++; } 对于(int i=0;i

指针字符串未返回预期输出 #包括 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

为什么我的rev字符串没有打印字符串的反面,而是打印出一些垃圾值。 你能指出原因吗?

在这个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);
在这个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这个词有一个拼写错误。我更新了代码。@nabeelkhan
    scanf(“%s”和&str)
    绝对不起作用。当您执行
    回显“这是一个相对较长的字符串”|/a.out
    时会发生什么情况?(提示,行为未定义)。你想要
    if(scanf(“%19s”,str)==1{…}
    我想,你是使用
    &str
    还是
    str
    是一个品味问题,但
    str
    绝对是首选。最终,代码将被修改,
    str
    将被分配到堆上,突然,
    &str
    的所有用法都将出错。在scanf中(“%s”,&str)也工作正常,这没有问题。问题是在while循环中,我更改了str的地址。谢谢您的帮助ans@nabeelkhan如果某个东西按预期工作,则表示它不正确。@nabeelkhan在我的函数中,while这个词有一个拼写错误。我更新了代码。@nabeelkhan
    scanf(“%s”和&str)
    绝对不起作用。当您执行
    回显“这是一个相对较长的字符串”|/a.out
    时会发生什么情况?(提示,行为未定义)。你想要
    if(scanf(“%19s”,str)==1{…}
    我想,你是使用
    &str
    还是
    str
    是一个品味问题,但
    str
    绝对是首选。最终,代码将被修改,
    str
    将被分配到堆上,突然,
    &str
    的所有用法都将出错。
    ***void revstr(char str[])
    不是可剪切粘贴的代码。如果您提供易于使用的代码示例,则更有用。
    ***void revstr(char str[])
    不是可剪切粘贴的代码。如果你愿意,它会有用得多