4

CDT プラグインを使用して Eclipse で 2 つのテンプレート プロジェクトを作成し (1 つは C プロジェクト、もう 1 つは C++)、2 つの非常によく似たプロジェクトをコンパイルしましたが (私の場合)、まったく異なるコンソール出力が得られます。なぜこの出力は非常に異なるのでしょうか? C コード:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int numbers[5];
      int * p;
      p = numbers;  *p = 10;
      p++;  *p = 20;
      p = &numbers[2];  *p = 30;
      p = numbers + 3;  *p = 40;
      p = numbers;  *(p+4) = 50;
      int n;
      for (n=0; n<5; n++)
        printf("%c ",numbers[n]);
    return EXIT_SUCCESS;
}

ゴミを出力する

C++ コード:

#include <iostream>
using namespace std;

int main() {
    int numbers[5];
      int * p;
      p = numbers;  *p = 10;
      p++;  *p = 20;
      p = &numbers[2];  *p = 30;
      p = numbers + 3;  *p = 40;
      p = numbers;  *(p+4) = 50;
      for (int n=0; n<5; n++)
        cout << numbers[n] << " ";
    return 0;
}

出力

10、20、30、40、50

4

4 に答える 4

23

Cのように印刷intしています。char

変化する

printf("%c ",numbers[n]);

printf("%d ",numbers[n]);
于 2013-03-26T12:08:11.183 に答える
8

整数の ASCII 値を出力します。試す

printf("%i", numbers[n])

それ以外の

printf("%c", numbers[n])
于 2013-03-26T12:09:50.587 に答える
8

数値を文字として出力しようとしているため、奇妙な出力が発生します。コードはこれでうまくいきました。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int numbers[5];
  int * p;
  p = numbers;  *p = 10;
  p++;  *p = 20;
  p = &numbers[2];  *p = 30;
  p = numbers + 3;  *p = 40;
  p = numbers;  *(p+4) = 50;
  int n;
  for (n=0; n<5; n++)
    printf("%d ",numbers[n]);
return EXIT_SUCCESS;
}

%c ではなく %d に注意してください

于 2013-03-26T12:12:48.393 に答える
1

C で整数を出力するには %d が必要で、文字を出力するには %c が必要です

http://www.cplusplus.com/reference/cstdio/printf/

以下のステートメントを見てください

printf("%c ",numbers[n]);

%c を使用して int を出力していますが、これは間違っています。

具体的に言うと、printf は C から借用したもので、いくつかの制限があります。最も一般的に言及されている printf の制限は、型の安全性です。これは、書式文字列と引数を正しく一致させるためにプログラマーに依存しているためです。varargs 環境から再び生じる 2 つ目の制限は、ユーザー定義型で動作を拡張できないことです。printf は一連の型を出力する方法を知っており、それで得られるのはそれだけです。それでも、使用できるいくつかのことについては、c++ ストリームよりも printf を使用して文字列をフォーマットする方が高速で簡単です。

于 2013-03-26T12:15:34.213 に答える