char*
2 進数を表すを取り、その数値に 1 を加算する関数を作成しました。非常に紛らわしいエラーが発生しました。これは、関数char*
を呼び出すときにユーザー入力から来たときに関数が正常に機能し、ダンディであるということです(別名argv[1]
)が、Bus error: 10
代わりに変数を内部で初期化して同じ関数に渡すと. この背後にあるものがわからないので、皆さんに頼ります。これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void addOneBinaryMain(char* strBiNum, int index)
{
if (strBiNum[index] == '0' || index == 0) { //BUS ERROR OCCURS HERE
strBiNum[index] = '1';
return;
} else {
strBiNum[index] = '0';
addOneBinaryMain(strBiNum, index - 1);
}
}
void addOneBinary(char* strBiNum)
{
addOneBinaryMain(strBiNum, strlen(strBiNum)-1);
}
int main(int argc, char* argv[]) {
char* str = argv[1];
char* strZero = "00000000";
int i;
printf("%s\n", str);
printf("%s\n", strZero);
addOneBinary(str);
printf("added one to input string: %s\n", str); //succeeds
addOneBinary(strZero);
printf("added one to internal zero string: %s\n", strZero);
return 0;
}
printステートメントでエラーをたどると、addOneBinaryMain
マークした時点で関数(再帰ステップ)で発生しているようです。