2013-03-30 2 views
0

Как создать несколько текстовых файлов в strcatс программой Как создать несколько текстовых файлов в strcat

В моем случае, например, я вход три имени

./test Пол Тони джон, поэтому я использовать 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"); 


    } 

ответ

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

Когда вы вызываете strcat(), вам нужно убедиться, что в буфере выделено достаточно места для первого аргумента для строки, которую вы пытаетесь добавить.

Вы не можете добавлять вещи непосредственно к элементам argv [] с помощью strcat().

Выделите новый буфер, который достаточно велик для обеих строк (включая нулевой символ в конце), strcpy() элемент argv [] в этом буфере, а затем выполните strcat().

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; 
}