Newsgroup: it.comp.lang.c
Titolo: Composizione stringhe :o)

Ciao ragazzi sto sbattendo la testa da 3/4 d'ora ma non riesco a venirne
fuori
In C dovrei comporre una stringa per poi darla in pasto alla funzione system
mi spiego:
Ho questa funzione system:
system("copy /b 1.tmp+2.tmp 1.tmp") di questa solo 2.tmp rimane uguale!
Il nome del file "1.tmp" viene insierito dall'esterno e memorizzato nella
variabile "name" definita "char* name"
Come posso fare a generalizzare il tutto?
Dovrebbe venir fuori una cosa del genere: system("copy /b name+2.tmp name")
Spero di essermi spiegato :)
CIAO e grazie

 > Ho questa funzione system:
 >
 > system("copy /b 1.tmp+2.tmp 1.tmp") di questa solo 2.tmp rimane
 > uguale!
Studiati la funzione sprintf().
e' quasi uguale alla printf ma "stampa" in una stringa invece
che sullo stdout.
quindi tu avrai qualcosa di questo tipo
(metto i puntini ... per non dover leggere nel dettaglio
il tuo post ...)
char comando[300];
sprintf(comando,"copy ... ... %s ....", name);
system(comando);
ciao,
g.

[cut]
grazie per la risposta ^__^'
Ho provato a usare sprintf ma al posto del valore della variabile mi vengono
messe dei caratteri senza senso :o)
Ti posto esattamente come ho scritto:
char name4 [256];
 sprintf(name4,"copy /b %s dummy.sav %s",name,name);
 system(name4);
name4 contiene questo: copy /b Ӽ?wӼ?w dummy.sav Ӽ?wӼ?w

 name4 contiene questo: copy /b Ó¼?wÓ¼?w dummy.sav Ó¼?wÓ¼?w
Evidentemente name non è quello che credi che sia. Guarda cosa è name
(magari fa una printf("%s", name)).
--- bye

 (magari fa una printf("%s", name)).
se faccio la printf appare correttamente :((

Ecco il programma ;)
Ps sono agli inizi ^___^
Praticamente il programma prende un file <74K e lo rende uguale a 74K
aggiungendoci un file dummy
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
 FILE* pFile = NULL;
 FILE* pFile2 = NULL;
 char* name;
 char* name3;
 char name4 [256];
 char* name2 =  "dummy.sav";
 unsigned int sizefile = 0;
    int i;
  printf("Insert the name of sav file \n");
     scanf("%s", name3);
        name = name3;
   pFile = fopen(name, "rb");
      if (pFile==NULL) perror ("Error opening file");
      else
      {
        fseek (pFile, 0, SEEK_END);
        sizefile=ftell (pFile);
                if (sizefile >= 75775)
                {
                printf("Size of %s is incorrect!!\n",name);
                exit(-1);
                }
    fclose(pFile);
    printf("Creating file one moment...");
       pFile2 = fopen(name2, "wb");
           fseek(pFile2,75776-sizefile-1,SEEK_SET);
           fputc('\0',pFile2);
       fclose(pFile2);
 printf("Done.\n");
 sprintf(name4,"copy /b %s dummy.sav %s",name,name);
 system(name4);
 system("del dummy.sav");
 }
}

         name = name3;
Non hai allocato name3! Devi fare name3 = (char*)malloc(256);
--- bye

Airone wrote:
 > [cut]
 >
 > grazie per la risposta ^__^'
 > Ho provato a usare sprintf ma al posto del valore della variabile mi 
vengono
 > messe dei caratteri senza senso :o)
 >
 > Ti posto esattamente come ho scritto:
 >
 > char name4 [256];
 >  sprintf(name4,"copy /b %s dummy.sav %s",name,name);
 >  system(name4);
 >
 > name4 contiene questo: copy /b Ó¼?wÓ¼?w dummy.sav Ó¼?wÓ¼?w
Evidentemente e' il contenuto di name ad essere senza senso....
Il problema non e' in sprintf ma in quello che
hai messo in name. (e' un * char ? come lo hai definito ?)
Prova a stampare name prima di eseguire la sprintf per
controllare.
ciao,
g.

> Non hai allocato name3! Devi fare name3 = (char*)malloc(256);
Grazie ^___^'
Funziona tutto ora ;)))
Ciaoooo

Massimiliano Alberti wrote:

Oppure
char name3 [256];
Giusto?
Marcello

 char name3 [256];
Non gli volevo cambiare il tipo di variabile :-) Lui voleva pointers, io gli
ho dato pointers :-)
--- bye