分段故障:11使用if条件时

时间:2017-02-02 17:35:14

标签: c

我在if条件下不断收到错误Segmentation fault。我以为是因为我没有使用strcpy命令但是也会出现同样的错误。

随着时间的推移,将为设备分配多个字符串,每次都会少于<100个字符。 我错过了什么?

char *aircraft, *aircraft_array[60000], equipment[100];
int size=0;


aircraft=strtok(equipment," ");


while (aircraft!=NULL){

            aircraft_array[size]=aircraft;
            size++;

            if (strcmp(aircraft_array[size],aircraft)==0){
                printf("%s\n",aircraft);
            }


            aircraft=strtok(NULL," ");
        }

2 个答案:

答案 0 :(得分:4)

问题是变量大小在if语句之前递增而不是在if语句之后递增

        size++;
        ^^^^^^^
        if (strcmp(aircraft_array[size],aircraft)==0){
                                  ^^^^^

交换陈述。

答案 1 :(得分:1)

问题是strtok的返回值不是持久的,指针指的是每次调用strtok时都会被修改的内部静态缓冲区(NULL,&#34;&#34;);

您需要做的是为令牌分配空间,然后将字符串复制到该空间,例如

aircraft=strtok(equipment," ");

while (aircraft!=NULL)
{
  aircraft_array[size]=malloc(strlen(aircraft)+1);
  strcpy(aircraft_array[size], aircraft);
  size++;