我无法尝试使用此功能的指针版本:
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);
答案 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;
}
您需要将每个字符从一个字符串复制到另一个字符串然后递增指针 - 您在实现中缺少该字符串。 我还假设您不会超过要复制的阵列。