重现strcpy的行为

时间:2016-02-09 02:34:12

标签: c strcpy

我试图在c中重现POST /blog/post/_search { "query": { "function_score": { "functions": [ { "gauss": { "visitor.last_visit": { "origin": "now/d", "offset": "3d", "scale": "4d", "decay": 0.5 } }, "filter": { "nested": { "path": "visitor", "query": { "term": { "visitor.id": "1" } } } } } ] } } } 的行为,我的问题是该函数可以正常工作,但它会在最后添加额外的东西。

strcpy

当我运行它时,我得到以下内容。

char    *ft_strcpy(char * dst, const char * src)
{
int i;
i = 0;
while (src[i] != '\0') {
    dst[i] = src[i];
    i++;
}
return dst;
}

function results

2 个答案:

答案 0 :(得分:2)

您没有复制nul终结符,因此printf无法停止。

只需在循环后添加dst[i] = 0;即可。

此外,您还没有为p分配任何空间,因此您将获得未定义的行为。对于第一个测试,只需执行类似char p[100];的操作,并确保z永远不会> 99个字符长。最终你需要一个更好的解决方案,但这会让你开始。

答案 1 :(得分:0)

TENTEN,

将dest [i]设置为' \ 0'在结束循环之后。这是代码:

int main()
    {
    char src[100], dest[100], i;
    printf("Enter string Src: ");
    scanf("%s",src);
    for(i=0; src[i]!='\0'; ++i)
        {
        dest[i]=src[i];
        }
    dest[i]='\0';
    printf("String Dest: %s",dest);
    return 0;
    }