从 const char *src 到 char *dest 的 C 逐字符字符串操作

标签 c strcat

我正在尝试通过一些操作将 char 从一个指针一个一个地复制到另一个指针。我尝试使用 strcat()、strncat()、strcpy()、strncpy() 但不断出现错误。如何将 char 从源指针复制到目标指针?
我最初将单引号作为 strcat 的 arg 2 传递,但它不起作用。当我将其更改为双引号时,它起作用了。它与“字符串常量”与“字符常量”或完全不同的东西有关吗?

void korsoroi(char *dest, const char *src) {
    int wcount = 0;
    int i = 0;
    while (src[i] != '\0') {

        if (src[i] == 'k' && src[i + 1] == 's') {
            strcat(dest, "x");
            i++;
        } 
        else if (src[i] == 't' && src[i + 1] == 's') {
            strcat(dest, "z");
            i++;
        } 
        else if (src[i] == ' ') {
            wcount++;
            if (wcount % 3 == 0) {
                strcat(dest, " niinku");
            }
            if (wcount % 4 == 0) {
                strcat(dest, " totanoin");
            }
        } 
        else {
        //expected 'const char *' but argument is of type 'char'
//            strcat(dest, src[i]);
//            strcat(dest, *(src + i);

        //warning: cast to pointer from integer of different size
//            strcat(dest, (char*)src[i]);

        //returns strange characters but compiles
        //dest[strlen(dest)] = src[i];


        }
        i++;
    }
}

http://2016-aalto-c.tmchq.co/en/Module_2/ 任务08

最佳答案

您需要的是一个跟踪dest 结尾的指针。当您在 dest 的末尾添加更多内容时,您会相应地增加这个 other 指针。示例:

void korsoroi(char *dest, const char *src)
{
  char*  dest_ptr = &dest[strlen(dest)]; // point at end of string

  for(; *src != '\0; src++)
  {
    if(src[i] == whatever)
    {
      strcpy(dest_ptr, "something");
      dest_ptr += sizeof("something");
    }
    else
    {
      *dest_ptr = *src;
      dest_ptr++;
    }
  }

  *dest_ptr = '\0';
}

此外,如果您要使用 src[i+1],那么您首先需要检查 src[i+1] 不是 '\0'.

关于从 const char *src 到 char *dest 的 C 逐字符字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41096192/

相关文章:

C:缓冲区溢出,更改传递的变量

c - 使用 strcat 超过 1 次 - link2019

c - 如果使用相同的数组作为两个参数,strcat() 会崩溃

c - 通过引用递归函数传递而不初始化引用

c - 如何阻止我的程序读取串行端口缓冲区?

c - 切换其他人写入您的终端的权限的过程 [Unix] [C]

C - 空终止字符不停止打印

c - C 中的动态大小字符串

c++ - matlab reshape 和置换函数的 C/C++ 替代方案

c - 接收C套接字数据分配二维数组