2

我正在尝试设计一个程序,在该程序中我将创建一个类似于 c 标准库中的函数的 3 个函数(strlen、strcmp、strcpy)。前两个我已经接近完成,只有最后一个是主要问题。我正在尝试创建一个与标准函数 strcpy 具有相同功能的函数。这是我到目前为止所拥有的。

void myStrncpy(char destination[], const char source[], int count) {

    for (int i = 0 ; source[i] != '\0' ; i++) {

    count++;
    }
}

到目前为止,我已经获得了“源”的长度并将其存储在“计数”中。我需要采取的下一步是什么?如果可能的话,我宁愿使用另一个 for 循环和 if 语句。谢谢!

** **编辑**** _

这就是我现在所拥有的...

void myStrncpy(char destination[], const char source[], int count) {

    for (int i = 0 ; source[i] != '\0' && destination[i] != '\0' ; i++) {
    destination[i] = source[i];
    count++;
    }

}

输出:

str1 before: stringone
str2 before: stringtwo

str1 after : stringtwo
str2 after : string two

第二次运行(我遇到问题的地方):

str1 before: stringthree
str2 before: stringfour

str1 after: stringfoure
str2 after: stringfour

我还需要在我的代码中输入什么,以便它复制每个字母直到它用完空间,或者它复制每个字母直到它用完要复制的字母?

4

3 回答 3

2

如果您已经编写了 MyStrcpy,那么您就差不多完成了:

stpncpy() 和 strncpy() 函数将最多 n 个字符从 s2 复制到 s1。如果 s2 的长度小于 n 个字符,则 s1 的其余部分用 `\0' 字符填充。否则,s1 不会终止。

所以你有一个 strcpy 的副本,它会在复制 n 个字符后停止;如果它比这更早停止(b / c你到了s2的结尾),用/ 0填充s1的其余部分。

于 2013-10-28T17:43:07.557 回答
1
/* Include header files
 */

 #include <stdio.h>

/* Pre=processor Directives
 */

 #define word_size   20

/* Function prototype
 */

void my_func_strcpy(char *source, char* destination);


 int main()

 {

        char source[word_size]      = "I am source";
        char destination[word_size] = "I am destination"; 

        printf("The source is '%s' \n", source);
        printf("The destination is '%s' \n", destination);

        /* Calling our own made strcpy function
         */
        my_func_strcpy(source, destination);

        printf("The source data now is '%s' \n");
        printf("The destination data now is '%s' \n");
 }

 /* Function to copy data from destination to source
  */  
 void my_func_strcpy(char *source, char* destination)
 {
    char temp[word_size] = {'\0'};
    int  index    = 0;

    /* Copying the destination data to source data
     */
    while (destination[index] != '\0')
    {
        source[index] = destination[index];
        index++;
    }

    /* Making the rest of the characters null ('\0') 
     */
    for (index = 0; index < word_size; index++)
    {
        source[index] = '\0';
    }
 }
于 2015-06-04T18:51:50.103 回答
-1
/* body of the function*/
/*Mahmoud Mohamed Younis*/
int i;
int j = 0;
for(i=0;i<10;i++)
{
    if(s1[i] == '\0')
    {
      int  index = i;
        while(s2[j]!='\0')
        {
            if(index>10)
               break;
            s1[index] = s2[j];
            j++;
            index++;
        }
        s1[index] = '\0';
        break;
    }
}
于 2017-11-18T01:12:36.787 回答