【发布时间】:2014-12-27 02:16:05
【问题描述】:
我阅读了标准,但仍不能确定:
#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类型。所以不需要强制转换它们,无论如何,即使类型不同,强制转换也不是一个好主意。
标签: c c99 undefined-behavior c11 restrict-qualifier