なぜ以下のargcの出力に違いがありますか?なぜargcの出力に違いがありますか?
まず:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
int main(int argc,char *argv[])
{
for(int i=1;i<=argc;i++)
std::cout<<argv[i]<<"\n"<<std::endl;
std::cout<<argc<<std::endl;
return 0;
}
しかし私は、私はargcのための出力を得ることはありませんargvのための出力を取得します。
第二の場合:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
int main(int argc,char *argv[])
{
std::cout<<argc<<std::endl;
for(int i=1;i<=argc;i++)
std::cout<<argv[i]<<"\n"<<std::endl;
return 0;
}
私はARGVとARGCの両方の出力を取得します。
どちらの場合も、 "cout"ではなく "printf"を使用すると、argcの出力が得られます。
なぜargcの出力に違いがありますか?
'i <= argc'は未定義の動作につながります。 'argc'が2の場合、有効な' argv'インデックスは 'argv [0]'と 'argv [1]'です。 'argv [2]'は未定義の動作です。 – jww
あなたのコードで 'argv [argc]'にアクセスしているので、 'std :: cout'メカニズムが混乱するだけです。 'std :: cout << argc << std :: endl;'の前に 'fprintf(stdout、"%d \ n "、argc);を実行すると、おそらく' argc'の値を得ることができますそれは私のために起こる)。いずれにせよ、常に他の人があなたに言ったように、常に '
tzot