有人可以帮助我使用此函数的指针版本

时间:2018-04-23 05:38:58

标签: c++ pointers

我无法尝试使用此功能的指针版本:

void strncpy(char t[], const char s[], const unsigned int n)
{
    unsigned int i = 0;

   for(i = 0; i < n and s[i]; i++)
       t[i]=s[i];
   t[i] = '\0'
}

此函数应该将一个数组的第一个“n”字符复制到另一个数组,然后以空字符结束。我确信这很简单但我还在学习指针:P

这就是我现在所拥有的:

void strncpy(char * t, const char * s, const unsigned int * n)
{ 
    unsigned int i = 0;
    for(i = 0; i < *n and *s; i++)
        *t = *s;
    *t = '\0';
}

我在主要通道中调用它:

char array_one[5] = "quiz";
char array_two[5] = "test";

unsigned int x = 2;
strncpy(array_one,array_two,x);

2 个答案:

答案 0 :(得分:0)

你没有增加指针,所以你总是覆盖同一个地址。也没有必要通过指针传递n

#include <cstddef>

void my_strncpy(char *t, const char *s, std::size_t n) {
    while (n && *s) {
        *t++ = *s++;
        --n;
    }
    *t = '\0';
}

注意:请注意使用size_t复制标准参数签名 虽然标准版本还返回strncpy而不是t的原始值,但标准void函数仍然存在。

答案 1 :(得分:-1)

#include <iostream>

// changing the function signature to take an int instead of
// pointer to int - cleaner
void my_strncpy(char * t, const char * s, const unsigned int n)
{ 
    unsigned int i = 0;
    for(i = 0; i < n; i++)
    {
        *t++ = *s++; // copy and increment
    }
    *t = '\0'; // fixing - added terminating char
}


int main(void)
{
    char  a[] = "string1";
    char b[] = "string2";

    my_strncpy(a,b,7); // replace 7 with appropriate size

    std::cout << a << std::endl;
}

您需要将每个字符从一个字符串复制到另一个字符串然后递增指针 - 您在实现中缺少该字符串。 我还假设您不会超过要复制的阵列。