私は標準を読みましたが、まだ確信が持てません:
#include <stdio.h>
#include <string.h>
void repl(char *restrict ap){
char *cp=strchr(ap,(int)'m');
*cp='M';
}
int main(){
char arr[] = "example";
repl(arr);
puts(arr);
return 0;
}
関数repl
ではstrchr
、オブジェクトを変更するための別のポインターを取得していました。結果は、最初の文字列が にm
置き換えられた文字列になると思いM
ます。
しかし、これは未定義の動作でしょうか?
はいの場合、ap[cp-ap]='M';
代わりに使用するのは*cp='M';
どうですか?