こんにちは私はCを使用して文字列に位置Nで文字列を挿入しようとしています。だから私はうまく機能する機能を開発しましたが、その問題はその作業が一度です。 これは私のコードです:関数は一度だけ実行しますC
char *substring(char *string, int position, int length)
{
char *pointer;
int c;
pointer = (char*) malloc(length+1);
if(pointer == NULL)
exit(EXIT_FAILURE);
for(c = 0 ; c < length ; c++)
*(pointer+c) = *((string+position-1)+c);
*(pointer+c) = '\0';
return pointer;
}
void insert_substring(char *a, char *b, int position)
{
char *f, *e;
int length;
length = strlen(a);
f = substring(a, 1, position - 1);
e = substring(a, position, length-position+1);
strcpy(a, "");
strcat(a, f);
free(f);
strcat(a, b);
strcat(a, e);
free(e);
}
int main(void) {
char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
char msg1 [] ="Good morning mr ";
char msg2 [] ="Good evening mr ";
insert_substring(msg1,username,17);
printf("%s\n",msg1);
insert_substring(msg2,username,17);
printf("%s\n",msg2);
return 0;
}
プログラムディスプレイ1メッセージ:
おはようMR XXXXXプログラムは後に任意の命令を実行していないことを私が発言何
、 insert_substringの2回目の呼び出し。エラーは表示されません。たぶんローカル変数の問題です。関数で使用されます
'UNLEN'は何ですか? –
配列 'msg1'と' msg2'は、あなたが初期化した文字列(もちろん終端文字も含む)に合う大きさです。これらの配列に追加しようとすると、* out of bounds *が書き出され、*未定義の動作*につながります。 –
Hmm確かに17は_length_と同じですか? – chux