我在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," ");
}
答案 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++;