当前位置: 首页 > 知识库问答 >
问题:

为什么在尝试访问字符串中的字符时会出现seg错误

曹焱
2023-03-14

我正在尝试将命令存储在队列中,并在以后从队列中读取它们。我使用这个队列是因为代码需要在Arduino上运行。当访问第一个(或任何)字符时,我得到一个分段错误。我在这里做错了什么?

int main() {
    cppQueue q(sizeof(char*), 10);
    char c1[] = {'a', 'b', 'c'};

    q.push(&c1);

    char *command;
    q.pop(&command);
    char first = command[0];  <-- error
    // do stuff with first

    return 0;
};

谢谢你的帮助!

PS:这招管用:

cppQueue q(sizeof(int), 10);
int x = 1;
q.push(&x);
int numba;
q.pop(&numba);
std::cout << numba << "\n"

共有1个答案

充子航
2023-03-14

数组不是指针。在大多数表达式情况下,数组可以自动转换为指针,但其中一个例外是与一元&运算符一起使用的。

使用q.push(&c1);,队列将读取为有效指针值安装的数组的内容(加上一些超出范围区域的垃圾)。

使用指针变量向队列提供指针。

int main() {
    cppQueue q(sizeof(char*), 10);
    char c1[] = {'a', 'b', 'c'};
    char* p = c1;

    q.push(&p);

    char *command;
    q.pop(&command);
    char first = command[0];
    // do stuff with first

    return 0;
}
 类似资料:
  • 我尝试从长字符串中获取字符串,该字符串是Firebase URL 现在,如果您注意到上面字符串中姓名朱利安之前和之后的分数不足。我试图得到这个名字,但我正在得到 这是我的代码

  • 我是初学C#的,我想为学校创建一个计算器,但是在第45行出现了一个错误。错误消息:字符串长度必须正好为一个字符。我认为在拆分String数组然后另存为char数组之后会有一个错误。但我不知道为什么,也许是假的。 代码部分: 错误消息由char[]发送。 我想我有一个从字符串[]分裂的翻译错误

  • 问题内容: 当我执行以下代码时,输​​出为“ nullHelloWorld”。Java如何处理null? 问题答案: 您正在尝试将值连接到。这由“字符串转换”控制,当一个操作数是a时发生,该转换被JLS的5.1.11节覆盖: 现在只需要考虑参考值: 如果引用为null,则将其转换为字符串“ null”(四个ASCII字符n,u,l,l)。

  • 获取输入字符串,将其反转并用“-”进行解析: 输入:计算机 输出: 为什么这段代码会出现错误,以及如何删除错误? 出现以下错误: 主要的java:3:错误:类ClassSet15是公共的,应该在名为ClassSet15的文件中声明。java公共类ClassSet15{^1错误

  • 无法打印出格式错误弹出的结果。 尝试在没有getWaitingTime()和%-20d(最后一个)的情况下执行,它可以工作。 尝试执行1,并用getWaitingTime()替换seqNo,它可以工作。 不确定是什么错误。 它调用toString方法的部分。它从servicelist被称为。 至于错误是: JAVAutil。MissingFormatArgumentException:邮局的格式说

  • 为什么我在字符串开始时获得额外的而在字符串之间获得 我在期待: