在C中将文件扩展名连接到基本名称

时间:2014-06-19 01:55:42

标签: c string multithreading strcat

出于某种原因,以下情况无效:

int i;
for(i = 1; i < argc; i++) // Create thread for each dataset.
{
    filename = strcat(argv[i], ".sdx"); // Concatenate file-extension '.sdx' to basename.
    pthread_attr_init(&attr); // Set the attribute of the thread (default).
    pthread_create(&tid[i], &attr, start_routine, filename); // Create thread.
    pthread_join(tid[i],NULL); // Join thread after it completed.
}

如果我只传入一个文件,它会起作用,但不止这会导致分段错误。我不明白,如果我不连接文件扩展名,而是传入完整的文件名(包括其扩展名)作为命令行参数,一切正常。

1 个答案:

答案 0 :(得分:3)

您不应直接修改argv[i]。将其复制到本地缓冲区中。

int i;
for(i = 1; i < argc; ++i)
{
    char *filename = malloc(strlen(argv[i]) + 4 + 1);
    sprintf(filename, "%s.sdx", argv[i]);
    pthread_attr_init(&attr); // Set the attribute of the thread (default).
    pthread_create(&tid[i], &attr, start_routine, filename); // Create thread.
    pthread_join(tid[i],NULL); // Join thread after it completed.
    free(filename);
}