1

これにより、誤った出力が生成されます。

誰かが私が間違っていることを教えてもらえますか? 最初の 1、2、または 3 文字が (文字に応じて) 表示されますが、残りはランダムです。

:これは単なる学習演習であり、これを行うためのより簡単な方法があることを認識しています。

int main(int argc, char *argv[])
{
  //Assume 1 arg only
  int len = strlen(argv[1]);
  char *d = malloc (strlen(argv[1])+1);
  strcpy(d,argv[1]);

  char *x;
  x = &d[0];

  int j,k;
  j = sizeof(char*);
  for (k=0;k<len;k++){
    printf("Value: %c\n\n", (*x + (k*j)));
}
4

3 に答える 3

2

sizeof(char)と等しいものを使用する必要があり1ます。これを試して:

j = sizeof(char);
for (k = 0; k < len; k++ ) {
    printf("Value: %c\n\n", *(x + k * j)); // j equals to 1
}

注:*(a + b)等しいa[b]またはb[a]

于 2013-09-28T08:20:16.953 に答える
1

または、単純にポインター演算を使用してこれを行うことができます。

int len = strlen(argv[1]);
char *d = (char*)malloc (len+1);
strcpy(d,argv[1]);

char*p=d;
while(*p)
        printf("Value: %c\n\n", *p++);
free(d);

また、によって割り当てられたメモリを解放するのを忘れていましたmalloc。最後に電話する必要がありますfree

于 2013-09-28T08:52:11.987 に答える
1

sizeof(char*)文字列内の文字間にバイトはありません。また、文字列の最初の文字を逆参照してから追加j*kしています。ループを次のように変更する必要があります

for (k=0;k<len;k++){
    printf("Value: %c\n\n", *(x + k));
}
于 2013-09-28T08:17:59.190 に答える