将元素从一个字符数组复制到另一个字符数组

Ran*_*vas 8 c arrays string null copying

我想将字符串中的元素转移到另一个字符串,因此编写了以下程序.最初,我认为for循环应该执行,直到复制了NULL字符(包括它).但是在这段代码中,如果找到一个NULL字符(即尚未复制),for循环终止,但它仍然能够显示已复制元素的字符串.如果首先没有NULL字符,这怎么可能?

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char temp[100], str[100];
    fgets(str, 100, stdin);
    int i;
    for(i = 0; str[i]!='\0'; i++)
    {
        temp[i] = str[i];
    }
    puts(temp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

mac*_*usz 7

当传递的参数中没有空终止符时,void puts(const char *)函数依赖size_t strlen(const char *)于此函数并且输出未定义(请参阅此答案).所以在你的情况下,strlen内部puts可能在你的数组中找到了一个0值,在你的内存中导致了一个正确的行为puts,但是不必总是这样,因为它是未定义的.


nal*_*zok 7

这是我的计算机上的输入和输出:

0
0
??`

Process returned 0 (0x0)   execution time : 1.863 s
Press any key to continue.
Run Code Online (Sandbox Code Playgroud)

看垃圾"絯忐`"?这是未定义的行为.你的计划运作良好,因为你(非)幸运.

同样,不确定的行为,不值得太多的讨论.

  • 我打算+1,直到我读到最后一行:**"**_未定义的行为不值得讨论._**"**虽然确实OP是"(非)幸运的",因为你把它,我认为未能讨论**未定义的行为**是*未能正确回答问题*. (3认同)