gpt4 book ai didi

c - 字符串数组 C 的段错误

转载 作者:行者123 更新时间:2023-12-02 04:34:34 25 4
gpt4 key购买 nike

我编写了一个程序,将一个字符串分解为以空格分隔的标记,然后将每个单独的字符串复制到一个字符串数组中。

程序运行良好,直到它到达 for-loop 并且在成功地将第一个字符串添加到数组并打印它之后,程序崩溃了。我调试了一下发现

args[i] = malloc((strlen(comm_str) + 1) * sizeof(char));

返回SEGFAULT 然后第二次执行循环。还调用堆栈打印出以下内容:

Address: 75F943F9, Function: strlen(), File: C:\Windows\syswow64\msvcrt.dll.`

我试图自己更正程序,但没有结果。起初我以为循环试图访问边界区域之外,但我认为我已经正确地 malloc'd 一切。

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

int main(){

char **args = NULL;
char input[] = "cmdline -s 20 -r -t parameter -p 20 filename";

int num = 0;
char *comm_str = strtok(input, " "); /*Tokens command line*/

while(comm_str != NULL){ /*Counts number of tokens*/
num++;
printf("%s %d\n", comm_str, strlen(comm_str));
comm_str = strtok(NULL, " ");
}
printf("\n");

args = malloc(num * sizeof(char*)); /*Allocates memory for the first string entry*/
if(!args){
return 0;
}

comm_str = strtok(input, " "); /*Starts tokening from beginning*/
for(int i = 0; i < num; i++){
args[i] = malloc((strlen(comm_str) + 1) * sizeof(char)); /*Allocates memory for strings*/
if(!args[i]){
for(int b = 0; b < i; b++){
free(args[b]);
}
free(args);
return 0;
}
strcpy(args[i], comm_str);
printf("%s\n", args[i]);
comm_str = strtok(NULL, " ");
}

printf("%d\n", num);

}

最佳答案

如您所知,

strtok 正在更改字符串。

计算完单词数后,字符串将包含一个单词。因此下一个 strtok 将返回 NULL。

以非破坏性方式计算参数个数,或复制字符串。

关于c - 字符串数组 C 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com