Я читал стандарт, но все еще не может быть уверен:Могу ли я использовать ограничитель в этой функции?
#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';
?
Да, но в этом контексте ничего особого не сказано. AFAICT, вам нужны две переменные-указатели в списке аргументов, чтобы она имела значение. Я не вижу ничего, что могло бы нарушить ограничение в коде, который вы показываете. –
Литералы, такие как '' m'', уже имеют тип 'int'. Так что не нужно бросать их, и в любом случае, даже если типы были разными, приведение не является хорошей идеей. –