有关指针的编译错误

Compilation error regarding pointers

本文关键字:编译 错误 指针      更新时间:2023-10-16

我一直得到运行时错误,我无法看到缺陷,请帮助,这是我提交给uva在线问题482排列数组

http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid = 8,页面= show_problem&问题= 423

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <cmath>
#include <set>
using namespace std;
struct goof
{
    int i;
    string num;
} f[10000];
bool cpr(goof x, goof y)
{
    if (x.i < y.i) return true;
    return false;
}
int main()
{
    int t;
    cin >> t;
    bool blank = false;
    while (t--)
    {
        getchar();
        char st[10000];
        gets(st);
        char* p = strtok(st, " ");
        int d = 0;
        while (p != NULL)
        {
            f[d].i = atoi(p);
            p = strtok(NULL, " ");
            d++;
        }
        char sc[10000];
        gets(sc);
        char* q;
        q = strtok(st, " ");
        d = 0;
        while (q != NULL)
        {
            f[d].num = q;
            q = (NULL, " ");
            d++;
        }
        sort(f, f + d, cpr);
        if (blank) printf("n");
        blank = true;
        for (int j = 0; j < d; j++)
        {
            cout << f[j].num << endl;
        }
    }
    return 0;
}

我得到一个运行时错误运行时错误

您需要包含标题<string>,因为您正在使用std::string

主要错误是在

行中省略了函数名。
q = (NULL, " ");

一定有

q = strtok(NULL, " ");

对于函数gets,它被排除在C/c++标准之外,尽管它不是错误,但编译器会发出相应的警告。

用标准函数std::getline代替gets