C++ : cout << (数字) で実行時エラーが発生する理由
ある特定の位置でcout を用いて数字を表示しようとするとエラーが発生してしまいます。
具体的には以下の関数内でのことなのですが、原因の分かる方がいましたら解答お願いします。
受け取った文字列を逆順にする関数です。
----------------------------------------------------------
void rev_str(char *a)
{
int length = 0;
cout << length; // ここでエラーが発生
while(true) {
if(*(a + length) == '\0') break;
length++;
}
for(int i = 0; i < length / 2; i++) {
char temp = a[i];
a[i] = a[length - i - 1];
a[length - i - 1] = temp;
}
}
---------------------------------------------------------
エラーの発生する部分ですが、数字ではなく文字・文字列なら問題なく表示されます。
このコードでは変数 length を表示しようとしていますが、length でなくても、またどのような『数』でも『この関数内』で cout を使用するとエラーが発生します。
この関数に何か間違いがあるのではないかと思うのですが、どうにも見つけることが出来ません。
コード全体はこの下に掲載します。
cout に何か制約があるのでしょうか。それとも、やはりコードのどこかに誤りがあるのでしょうか。わかる方がいましたら、解答お願いします。
全コード
------------------------------------------------------
#include <iostream>
#include <cstring>
using namespace std;
void rev_str(char *a);
void rev_str(const char *source, char *des);
int main()
{
char a[80], b[80];
strcpy(a, "hello, world!");
rev_str(a, b);
rev_str(a);
cout << a << "\n";
cout << b << "\n";
return 0;
}
void rev_str(char *a)
{
int length = 0;
cout << length;
while(true) {
if(*(a + length) == '\0') break;
length++;
}
for(int i = 0; i < length / 2; i++) {
char temp = a[i];
a[i] = a[length - i - 1];
a[length - i - 1] = temp;
}
}
void rev_str(const char *source, char *des)
{
char *a = (char*)malloc(sizeof(source));
strcpy(a, source);
rev_str(a);
strcpy(des, a);
free(a);
}
お礼
うまく処理してくれるわけですね。 回答ありがとうございました。