Strcpy 和 strtok 不起作用

Strcpy and strtok don't work

本文关键字:不起作用 strtok Strcpy      更新时间:2023-10-16

我需要打印给定字符的组件(在这种情况下是分隔的数字 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:userselllydocumentsvisual studio 2013projectsconsoleapplication15446consoleapplication15446source.cpp 18  1   ConsoleApplication15446
error C2664: 'char *strcpy(char *,const char *)' : cannot convert argument 1 from 'char' to 'char *'    c:userselllydocumentsvisual studio 2013projectsconsoleapplication15446consoleapplication15446source.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] << " ";
}

你的代码看起来没问题,如果你在Linux上运行,你必须检查文件/lib/modules/$(uname -r)/build是否指向头文件的有效位置(通常在/usr/src/linux-headers-XXXX中)。
很多时候,在安装新的内核和头文件后,这个链接会断开,然后你的程序无法链接到库,因此它不会编译。
希望对您有所帮助。

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