【问题标题】:C equivalent functionC 等效函数
【发布时间】:2021-06-05 09:12:54
【问题描述】:

我正在处理一项转换任务

void f(char s[], char t[]){   
    int k=0;
        while (s[k]=t[k])  k++; 
} 

转化为等价形式

void f(char *s, char *t)
{    
    while (____);
}

我知道可以转换成

void f(char *s, char *t){
    int k=0;
    while (*(s+k)=*(t+k))k++;
}

问题是,它只允许填写括号。我没办法了

【问题讨论】:

  • 但是不允许添加更多的参数,也不能更改同时为for
  • @fpiette 我认为这个问题此时无效?无论如何,我编辑了我的评论

标签: c pointers while-loop declaration variable-declaration


【解决方案1】:

简单地增加指针本身。

void f(char *dest, char *source) {
    while ((*dest++ = *source++));
}

这将在分配的字符为 NUL ('\0') 时结束循环。

示例程序,具有类型限定符正确性:

#include <stdio.h>

void f(char *dest, const char *source) {
    while ((*dest++ = *source++));
}

int main(void) {
    char buffer[32];
    const char *string = "Hello, world!";
    f(buffer, string);
    puts(buffer);
}

当然,这与标准库strcpy 存在相同的问题,您必须小心确保目标缓冲区中有足够的空间在调用此函数之前

【讨论】:

    【解决方案2】:
    void f(char *s, char *t)
    {    
        while (*s++ = *t++);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-23
      • 2021-07-19
      • 2011-08-14
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多