我有一个巨大的问题,我在控制台反向参数中打印,例如" ./ 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<<" ";
}
答案 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++)