【发布时间】:2021-02-21 06:18:48
【问题描述】:
我正在用 C 语言为学校做一个项目,但遇到了一个奇怪的问题。 我的程序运行正常,但在最后一个命令之后,我得到了一个分段错误,我不明白为什么。
这是我的代码:(抱歉葡萄牙版)
void main_args(int argc, char* argv[], struct main_data* data)
{
char *str;
for(int i = 1; i < argc; i++)
{
strcat(str, argv[i]);
strcat(str, " ");
}
if(argc != 6 || sscanf(str, "%d %d %d %d %d", &data->max_ops, &data->buffers_size, &data->n_clients, &data->n_proxies, &data->n_servers) != 5)
{
if(argc == 1){
printf("Uso: sovaccines max_ops buffers_size n_clients n_proxies n_servers\n");
printf("Exemplo: ./bin/sovaccines 10 10 1 1 1\n");
}else{
printf("Parâmetros incorretos! Exemplo de uso: ./bin/sovaccines 10 10 1 1 1\n");
}
}
}
int main(int argc, char* argv[]){
struct main_data* aux = malloc(sizeof(struct main_data));
main_args(argc, argv, aux);
printf("primeiro: %d\n", aux->max_ops);
printf("segundo: %d\n", aux->buffers_size);
printf("terceiro: %d\n", aux->n_clients);
printf("quarto: %d\n", aux->n_proxies);
printf("quinto: %d\n", aux->n_servers);
free(aux);
printf("What the hell\n");
return 0;
}
输出如下:
希望有人可以帮助我。
【问题讨论】:
-
strcat(str, argv[i]);-str只是一个指针,没有内存可以复制字符串。 -
最好不要使用
str,而只使用sscanf或strtol一个一个的参数。
标签: c segmentation-fault