Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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
我用C写的这个字符串反转器有什么问题?_C_Arrays_String_Reverse - Fatal编程技术网

我用C写的这个字符串反转器有什么问题?

我用C写的这个字符串反转器有什么问题?,c,arrays,string,reverse,C,Arrays,String,Reverse,我看到过类似的事情(变量的变化),但这一次没有,你们能告诉我为什么吗? 代码如下: #include <stdio.h> #include <string.h> int main(){ int i,j,k; char str[255],rvrs[255]; printf("Insert your string: "); gets(str); i=strlen(str); k=i; for(j=0;j<=

我看到过类似的事情(变量的变化),但这一次没有,你们能告诉我为什么吗? 代码如下:

#include <stdio.h>
#include <string.h>

int main(){
    int i,j,k;
    char str[255],rvrs[255];

    printf("Insert your string: ");
    gets(str);

    i=strlen(str);
    k=i;

    for(j=0;j<=i;j++,k--){
        rvrs[k]=str[j];
    }

    printf("%s",rvrs);
}
#包括
#包括
int main(){
int i,j,k;
字符str[255],rvrs[255];
printf(“插入字符串:”);
获取(str);
i=strlen(str);
k=i;

for(j=0;j在循环的最后一次迭代中,
j
等于
i
str[i]
是空字符(
str[0]
str[i-1]
是字符串中的
i
非空字符)
设置为空字符。此时,
k
为零。因此,
rvrs
包含一个空字符串(其中空字符是第一个字符的字符串,因此字符串结尾没有非空字符)

要解决此问题,您需要修改代码:

  • 首先,将
    rvrs[i]
    设置为零,这样它将在您想要的位置终止

  • 其次,修改循环以正确地将元素从
    0
    反转为
    i-1
    ,而不是从
    0
    反转为
    i
    。执行此操作时,请注意确保
    k
    具有正确的值


带有
j对于符合C标准的起动器,不带参数的功能
main
应声明如下

int main( void )
函数
gets
不安全,C标准不再支持该函数。例如,使用标准函数
fgets

j
等于
i
而该值又等于
strlen(str)
时,
str[j]
等于'\0'。即终止零写入数组的开头
rvrs

rvrs[k]=str[j];
这没有道理

考虑到函数
strlen
具有返回类型
size\u t
not
int

程序可以按以下方式运行

#include <stdio.h>
#include <string.h>

#define N   255

int main(void) 
{
    char str[N], rvrs[N];
    str[0] = '\0';

    printf("Insert your string: ");
    fgets( str, sizeof( str ), stdin );

    size_t n = strcspn( str, "\n" );

    for ( size_t j = 0; j != n; j++ )
    {
        rvrs[j] = str[n - j - 1];
    }

    rvrs[n] = '\0';

    puts( rvrs );

    return 0;
}

首先,请告诉我们什么“不起作用”很多人会抱怨你把C和C++都贴上标签,尽管它们是分开的语言。我想问:你为什么这么做?你认为它们是一种语言吗?你认为C++中的任何东西都应该是自动的C,还是反之亦然?你想要一个答案吗?对于两个或两个答案,每个答案一个?可能类似于Java和Javascript。后者类似于前者,但脚本:/Function
gets
已过时。数组索引。
k=i;for(J=0;谢谢你的帮助。我对这些毫无意义。我只标注了C++,因为我需要五个标签,我不知道还有什么要做的。put@DavidMachado:五个标签是上限,不是要求。然后我误解了。这太尴尬了sorry@DavidMachado:没什么大不了的。
Insert your string: Hello David Machado
odahcaM divaD olleH