【问题标题】:C standard library function 'strncpy' not workingC标准库函数'strncpy'不起作用
【发布时间】:2017-08-03 15:53:54
【问题描述】:

C 代码:

#include<stdio.h>
#include<string.h>

#define STRINGS 10
#define STR_LEN 20

int main(void)
{
    char words[STRINGS][STR_LEN];

    char input[STR_LEN];

    int i;
    int mycount;

    for(i = 0;i < STRINGS;++i;)
    {
        printf("Enter a word (or 0 to quit)\n:");

        scanf("%19s", input);

        if(input[0] == '0') break;

        strncpy(words[i], input, STR_LEN);

        mycount++;
    }

    printf("A total of %d strings were entered!\n",mycount);

}

问题:当我运行此代码并输入一些字符串时,它不会打印出我输入的字符串数量

enter image description here

【问题讨论】:

  • for(i = 0;i &lt; STRINGS;++i;) 无法编译。 BTW imycount 是相同的,除了 mycount 从未初始化。
  • 您忘记将mycount 初始化为零
  • 只是提示:在主要实现的 C 标准库中发现明显错误并非闻所未闻,但可能性极小。这东西是20或30岁。相对不太可能发现编译器错误或 CPU 错误。我想我们中的大多数人在某个时候都怀疑过其中之一,但它几乎从来都不是真的。比如,我在 1997 年左右有一位同事确实在 Z80 克隆中发现了一个错误。那不太可能。在所有其他情况下,该错误或多或少是一个微妙的编码错误,或者是构建环境设置中的错误。
  • 不要使用strncpy,这是一个危险的函数,并且从未打算用于以空结尾的字符串see this

标签: c c-strings standard-library


【解决方案1】:

您需要将 mycount 初始化为 0。

int mycount =0;

【讨论】:

  • 请至少让 OP 以文本而不是图像的形式提供关键信息。
【解决方案2】:

变量mycount 未初始化。然后,您尝试通过++ 运算符在for 循环中对其进行修改。因此,您正在读取垃圾值并写入垃圾值。这解释了你得到的输出。

读取未初始化的变量会调用undefined behavior。在这种情况下,它表现为垃圾值,但它也很容易输出预期值或导致崩溃。

在声明时初始化这个变量。

int mycount = 0;

【讨论】:

  • “写一个未初始化的变量”是什么意思
  • @Bathsheba 不错。已编辑。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多