【问题标题】:Keep Getting Segmentation Fault (core dump) when trying to print array尝试打印数组时不断出现分段错误(核心转储)
【发布时间】:2020-08-15 01:59:39
【问题描述】:

不知道为什么我会在这方面出错,有人可以帮助我吗?另外,我知道尺寸不同且不正确,我现在并不担心。我只是想测试一些东西。

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

int main(int argc, char *argv[]) {


        char csvDest[100] = "1000,cap_net_raw,cap_sys_admin";
        char *tokptr = strtok(csvDest,",");
        char *csvArray[100];

        int i = 0;
        while(tokptr != NULL){
              csvArray[i++] = tokptr;
              tokptr = strtok(NULL, ",");
        }

        int j;
        for(j=0; j < i; j++){
            printf("%s\n", csvArray[j]);
        }

        return 0;
}

【问题讨论】:

  • csvDest 不一定是一个以 null 结尾的字符串,这是 strtok 所要求的。
  • @Cheetaiean,由 OP 编写,csvDest 是 NUL 终止的。

标签: c arrays string segmentation-fault strtok


【解决方案1】:

您错过了对 strtok 的呼叫。

替换

              tokptr = (NULL, ",");

              tokptr = strtok(NULL, ",");

您不能打印 100 个字符串,除非它们已被分配。你应该替换

        for(i=0; i < 100; i++){
            printf("%s\n", csvArray[i]);
        }

        for(int j=0; j < i; j++){
            printf("%s\n", csvArray[j]);
        }

【讨论】:

  • 很抱歉,这也是一个错字。我仍然遇到同样的错误。
  • 我很感激,仍然没有解决 seg fault 错误
  • @ldd12345 请查看并将您当前的来源重新发布到问题中。 (我没有看到更多的段错误。)请注意,i 在打印循环中的任何地方都被j 取代......
  • 进行了您要求我进行的更改。
  • 抱歉已修复,立即查看
【解决方案2】:

您的for 循环没有将i 设置回数组的开头。即,在访问printf 中的csvArray 之前,将i 设置为0。照原样,解除对数组的引用是在访问一个尚未设置的指针。

【讨论】:

  • 那是一个错字。我仍然遇到分段错误。
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 2016-08-18
  • 2013-11-15
  • 2021-12-20
相关资源
最近更新 更多