【问题标题】:Strcpy and strtok don't workstrcpy 和 strtok 不起作用
【发布时间】:2014-12-10 14:33:27
【问题描述】:

我需要打印给定字符的组成部分(在这种情况下是由 pe whitespece 分隔的数字),但我不明白为什么这不起作用(不编译):(或这里 http://ideone.com/JSrqg5 )。

错误是:

error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.  c:\users\ellly\documents\visual studio 2013\projects\consoleapplication15446\consoleapplication15446\source.cpp 18  1   ConsoleApplication15446
error C2664: 'char *strcpy(char *,const char *)' : cannot convert argument 1 from 'char' to 'char *'    c:\users\ellly\documents\visual studio 2013\projects\consoleapplication15446\consoleapplication15446\source.cpp 21  1   ConsoleApplication15446

还有代码:

#include <iostream>
#include <cstring>
using namespace std;
char s[20000], *p, a[5000], separator[] = " ";
int k = 0, i;
void separare();
void afisare();
int main()
{
    cout << "Sirul de nr:"; cin.get(s, 100, '\n');
    separare();
    afisare();
    system("pause");
    return 0;
}
void separare()
{
    p = strtok(s, separator);
    while (p)
    {
        strcpy(a[k], p);
        k++;
        p = strtok(NULL, separator);
    }
}
void afisare()
{
    int i;
    for (i = 0; i < k; i++)
        cout << a[i] << " ";
}

【问题讨论】:

  • 我认为你必须包含 cstring 库:#include
  • 修改后再次指向 strcpy 和 strtok 。
  • 你说的这个“不起作用”是什么?
  • @Poldie 他的意思是它没有编译,说 strtok 和 strcpy 没有定义。 Daniq:不起作用是一个糟糕的描述,它要么无法编译,那么您应该提供错误,或者没有产生预期的输出,那么您应该发布预期的输出以及它给出的内容。

标签: c++


【解决方案1】:

您的代码似乎没问题,但如果您在 linux 上运行,您必须检查文件 /lib/modules/$(uname -r)/build 是否指向头文件的有效位置(通常在 /usr/ src/linux-headers-XXXX).
很多次在安装新内核和头文件后,此链接会损坏,然后您的程序无法链接到库,因此无法编译。
希望对您有所帮助。

顺便说一句,你不能将 a[k] 用于 strcpy,因为这是取消对单个 char 的引用,而输入必须是 char*。您应该改用指针表示法,即 (a+k) 在这种情况下可以使用。

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2016-07-30
    • 2011-08-16
    • 2018-11-29
    • 2014-01-10
    • 2014-06-18
    • 2021-02-28
    • 2014-12-21
    • 2016-07-21
    相关资源
    最近更新 更多