c program如何在strcat中创建多个文本文件

时间:2013-03-30 18:24:32

标签: c file file-io strcat

如何在strcat中创建多个文本文件

就我而言,例如我输入了三个名字

./ test paul tony john,所以我用strcat添加“.dat”

但是我不能设置三个名字是paul.dat tony.dat john.dat

结果是paul.dat.dat.dat dat.dat.dat .dat.dat

int main(int argc, char *argv[]){

int pid, myid ,cid; 
int num_name;
int i, n, returnpid;
int val;

num_name = argc-1;

for (i =1; i<=num_name; i++) {
       strcat(argv[i],".dat");


    }

3 个答案:

答案 0 :(得分:2)

当你调用strcat()时,你需要确保为你想要添加的字符串的第一个参数分配了足够的空间。

您无法使用strcat()直接向argv []的元素添加内容。

为两个字符串(包括末尾的nul字符),strcpy()argv []元素分配一个足够大的新缓冲区,然后执行strcat()。

答案 1 :(得分:1)

您无法将".dat"直接附加到argv[i],因为argv[i]的分配大小只能保留其原始内容。

要了解发生了什么,想象argv是这样的:

char buffer[] = "./test\0paul\0tony\0john\0";
char *argv[4] = { &buffer[0], &buffer[7], &buffer[12], &buffer[17] };

所以你可以看到,如果你在"paul"之后写一些东西,你将覆盖"tony"并打破整个事情,因为它们被序列化在同一个缓冲区中。

要解决此问题,您必须将每个argv[i]复制到更大的缓冲区,以便安全地进行修改。例如:

int i;
char filename[1024];
for (i = 1; i < argc; ++i) {
    sprintf(filename, "%s.dat", argv[i]);
    // ... do stuff
}

然后,您将拥有一个包含所需文件名的变量filename,而不会损坏argv

答案 2 :(得分:1)

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

int main(int argc, char *argv[]){
    int pid, myid ,cid; 
    int num_name;
    int i, n, returnpid;
    int val;

    num_name = argc-1;

    for (i =1; i<=num_name; i++) {
        char *p;
        p=(char*)malloc(sizeof(char)*(strlen(argv[i])+5));//5= 4(.dat) + 1(EOS)
        sprintf(p, "%s.dat", argv[i]);
        argv[i]=p;
    }
    for(i =1; i<=num_name; i++)
        printf("%s\n", argv[i]);
   return 0;
}