首页 文章

将字符串从源字符串复制到缓冲区 - C.

提问于
浏览
0

我目前正在从事一个计算机科学项目,并且已经完全开始工作了一个非常具体的案例,我似乎无法修复 . 代码的目标是编写一个函数int tokenCopy(char * dest,const char * src,int destSize),它将给定源字符串src中的字符复制到给定的目标缓冲区dest(大小为destSize),直到:

发生源字符串的结尾,或者目标缓冲区已满(允许需要的终结符),或者在输入字符串中找到空格字符

以先到者为准 . 如果由于找到空格而完成复制,则不会复制空间 . 必须始终正确终止目标字符串 . 如果源字符串的目标中没有足够的空间,则目标字符串必须是源字符串的正确终止的前导子字符串 .

返回值是复制的字符数,不包括终止空字节 .

在以下的形式进行测试的地方:

char buff[3];
int n = tokenCopy(buff, "This is a string", 3);
printf("%d '%s'\n", n, buff);

到目前为止这是我的代码:

#include <stdio.h>
 int tokenCopy(char* dest, const char* src, int destSize){
        int new_value = 0;
        int i=0;


        for (;*src != ' '; new_value++){
        destSize = 1;
        return new_value;
        }

        for (; *src != '\0' && *src!= ' '; new_value++)
        {
            while (i < destSize-1 && *src!= '\0'){
            *dest = *src;
            dest++;
            src++;
            new_value++;
            i++;

        *dest = '\0';
            }
        return new_value;
       }
    return new_value;
   }

但是在以下测试的情况下:

char buff[10];
int n = tokenCopy(buff, " ", 10);
printf("%d '%s'\n", n, buff);

输出应该是:

0 ''

然而,我的代码输出零,然后是包含不同字母的语音标记,每次我尝试对代码进行更改时,在菱形中跟着一个问号 . 作为参考,我使用的是Geany IDE .

任何有关此问题的帮助将不胜感激 .

4 回答

  • 0

    您需要在函数内分配 dest

    int tokenCopy(char *dest, const char *src, int destSize) {
        *dest = 0;
        // rest of the code
    }
    
  • 0

    摆脱第一个 for 循环后,您可以修改第二个 for 循环

    for ( i = 0; *src != '\0' && *src!= ' ' && (i < destSize-1) ; i++)
    {
       *dest++ = *src++;
    }
    *dest = '\0';
    
    return new_value;
    

    得到你想要的 . 修改包括

    • 摆脱空字符串的冗余检查 .

    • 结合复制值和指针增量

    • 将目标长度检查添加为循环本身的终止条件

  • 3

    甚至是函数实现的第一个循环

    for (;*src != ' '; new_value++){
        destSize = 1;
        return new_value;
        }
    

    没有意义 .

    该功能可以通过以下方式编写

    #include <stdio.h>
    
    size_t tokenCopy( char *dest, const char *src, size_t destSize )
    {
        size_t n = 0;
    
        if ( destSize != 0 )
        {        
            while ( n < destSize && *src && *src != ' ' ) dest[n++] = *src++;
    
            dest[n == destSize ? --n : n] = '\0';
        }        
    
        return n;
    }
    
    int main( void )
    {
        char buff[10];
        size_t n;
    
        n = tokenCopy( buff, " ", 10 );
        printf("%zu \"%s\"\n", n, buff );    
    
        n = tokenCopy( buff, "0123456789", 10 );
        printf("%zu \"%s\"\n", n, buff );    
    }
    

    程序输出是

    0 ""
    9 "012345678"
    
  • 0
    #include<stdio.h>
    
    int tokenCopy(char* dest, const char* src, int destSize){
            while(*src && destSize>1 && *src!=' ') {
    
                    *dest = *src;
    
                    dest++;
                    src++;
                    destSize--;
            }
    
            *dest = '\0';
    
    
    }
    
    main(int argc, char **argv)
    {
            char buff[6];
            tokenCopy(buff,"Th",6);
    
            printf("%s\n",buff);
    }
    

相关问题