c - 以下两个函数是否等价?如果不是,为什么不呢?

标签 c string function pointers char

void s1(char dest[], char src[])
{
    int i=0;
    while(dest[i++]=src[i++]);
}

void s2(char * dest, char *src)
{
    while(*dest++=*src++);
}

另外注意,这个问题我是从书上拿来的,不知道代码对不对(我觉得while循环里应该有两个'=')

最佳答案

第二个代码执行字符串复制。它等同于 strcpy()

第一个代码具有未定义的行为,因为它在一条语句中更新了两次 i,而没有插入序列点。

所以答案是它们不一样。

第一个代码可以更正。例如像这样:

void s1(char dest[], char src[])
{
    int i=0;
    while(dest[i]=src[i]) i++;
}

关于c - 以下两个函数是否等价?如果不是,为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42072157/

相关文章:

php - 在 While 循环中运行 PHP 函数

python - 创建以动态数量的值作为参数的字典

c - volatile 不会阻止变量被优化

c - C中http header 的正则表达式

用于括号精确匹配的 Python RegEx

c - 如何在 C 中复制此字符串?

c++ - 传递一个自由函数来调用?

c - C中的互斥体和线程

C、malloc大小

c - 检测消息字符串是否是 QP 编码的