int main(int argc, char **argv){
char Q[MAXCHAR];
Q=argv[k+1];}
Qは配列であり、argv [k + 1]はポインタです。 argv [k + 1]の内容をQにどのように取得できますか?argv [k]を別の文字列にするには?
int main(int argc, char **argv){
char Q[MAXCHAR];
Q=argv[k+1];}
Qは配列であり、argv [k + 1]はポインタです。 argv [k + 1]の内容をQにどのように取得できますか?argv [k]を別の文字列にするには?
Q = argv[k+1]
を直接割り当てることはできません。配列(Q[MAXCHAR]
)の場合、arrayname(Q
)がベースアドレスです。配列のベースアドレスは変更できません。 k = 0
と仮定すると、あなたはARGVを取得するには、次のいずれかを使用することができます[1] Q.へのデータ
memmove(Q, argv[1], strlen(argv[1]) + 1);
または
snprintf(Q, strlen(argv[1]) + 1, "%s", argv[1]);
または
strncpy(Q, argv[1], strlen(argv[1]) + 1);
または
memcpy(Q, argv[1], strlen(argv[1]) + 1);
ここか
sprintf(Q, "%s", argv[1]);
または
strcpy(Q, argv[1]);
プログラムがあり、それはMEMMOVEを使用して出力です:
#include <stdio.h>
#include <string.h>
#define MAXCHAR 20
int main(int argc, char **argv)
{
if (argc < 2) {
puts("Not enough arguments");
return -1;
}
char Q[MAXCHAR] = {0};
memmove(Q, argv[1], strlen(argv[1]) + 1);
puts(Q);
return 0;
}
出力:
[email protected]:~$ ./a.out stackexchange
stackexchange
ポインタと配列は、実際には、同じものです。 'strcpy'が必要です。 – Sulthan
@Sulthanポインタと配列が同じではありません。配列は、特定の状況でポインタに崩壊します。それで全部です。 –
@underscore_d Cの配列は、先頭へのポインタによって識別される連続したメモリのチャンクではありませんか? – Sulthan