【问题标题】:c program How to create multiple a text file in strcatc程序如何在strcat中创建多个文本文件
【发布时间】:2013-03-30 18:24:31
【问题描述】:

如何在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");


    }

【问题讨论】:

    标签: c file file-io strcat


    【解决方案1】:

    当您调用 strcat() 时,您需要确保为您尝试添加的字符串的第一个参数分配的缓冲区中有足够的空间。

    你不能用 strcat() 直接向 argv[] 的元素添加东西。

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

    【讨论】:

      【解决方案2】:

      您不能将".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

      【讨论】:

        【解决方案3】:
        #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;
        }
        

        【讨论】:

          猜你喜欢
          • 2015-09-10
          • 2021-11-26
          • 1970-01-01
          • 2015-01-18
          • 1970-01-01
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多