C ++反转char *添加" a"

时间:2015-06-21 13:45:54

标签: c++

我有一个巨大的问题,我在控制台反向参数中打印,例如" ./ program.exe foo bar sula"将输出" oof rab alus&#34 ;,但由于某种原因,它会增加" a"在每一个字之前,#aofof arab aalus",任何人都可以帮忙吗? 这是我的代码。

for(int i=1;i<argc;i++){
    for(int j=strlen(argv[i]);j>-1;j--){
        cout<<argv[i][j];
    }
    cout<<" ";
}

3 个答案:

答案 0 :(得分:1)

数组的最后一个合法索引是size-1

例如:在长度为5的数组[0,1,2,3,4]中,最后一个合法索引为:4。

意思是,当您开始从index = strlen(...)打印字符串时,您已经超出范围 您应该将第二个循环更改为从strlen(argv[i])-1

运行
for(int i=1; i<argc; i++) {
    for(int j=strlen(argv[i])-1; j>-1; j--) {
        cout << argv[i][j];
    }
    cout << " ";
}

答案 1 :(得分:0)

尝试以下

for ( int i = 1; i < argc; i++ )
{
    for ( size_t j = strlen( argv[i] ); j != 0; j-- )
    {
        cout << argv[i][j-1];
    }
    cout<<" ";
}

标准C函数strlen的返回类型为size_t。因此,最好使用一个变量作为size_t

类型的索引

如果字符串为空,那么strlen将返回0.因此内循环最可读的条件是

j != 0

如果字符串不为空,则执行循环。字符串长度不能为负。:)

答案 2 :(得分:-1)

为什么会这样:

for(int i=1;i<argc;i++){

我认为它应该是这样的,如果你想循环所有命令:

for(int i=0;i<argc;i++)