n° 219
Novembre 2017
Dicembre 17, 2017, 11:47:43 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1] 2 3   Vai giù
  Stampa  
Autore Discussione: Si possono intercettare o disabilitare gli errori in fase di bulding in c/c++ ?  (Letto 3875 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« inserita:: Marzo 11, 2017, 11:53:05 »

Salve a tutti !
io lavoro con code blocks 10.5 e vorrei creare un programma che accetti come assegnamento di una stringa le doppie virgolette dentro di essa . Ad esempio : char stringa[100] = "giu"s"eppe"; .
Certo io posso fare così :char stringa[100] ={103,117,115,34,115,34,101,112,112,101,0}; ,
però questo metodo non è di facile applicazione .
Per esempio il programma che segue legge delle stringhe e le unisce :
Codice:
#include<stdio.h>
#include<windows.h>
char *TmpStr (size_t Bites)
{
  static int   StrCnt;
  static char *StrFunc[2048];
  StrCnt=(StrCnt + 1) & 2047;
  if(StrFunc[StrCnt]) free (StrFunc[StrCnt]);
  return StrFunc[StrCnt]=(char*)calloc(Bites+128,sizeof(char));
}


char * join(int n, ...)
{
  register int i = n, tmplen = 0;
  register char *s_;
  register char *strtmp;
  va_list marker;
  va_start(marker, n); // Initialize variable arguments
  while(i-- > 0)
  {
    s_ = va_arg(marker, char *);
    if(s_) tmplen += strlen(s_);
  }
  strtmp = TmpStr(tmplen);
  va_end(marker); // Reset variable arguments
  i = n;
  va_start(marker, n); // Initialize variable arguments
  while(i-- > 0)
  {
    s_ = va_arg(marker, char *);
    if(s_) strcat(strtmp, s_);
  }
  va_end(marker); // Reset variable arguments
  return strtmp;
}
int main()
{
    char    CRLF[3]={13,10,0}; // Carr Rtn & Line Feed
    char    prova[20];scanf("%s",prova);
   printf("%s",join(4,"dddd",CRLF,"aaaa","kkkkk"));
   printf("\n\n");
   printf("%s",join(3,"dddd",prova,"aaaa","kkkkk"));

}
Però se nella funzione join() metto : 
 printf("%s",join(3,"dddd",prova,"aa"xxx"aa","kkkkk"));
o
  printf("%s",join(3,"dddd",prova,"printf("xxx");","kkkkk"));
questa non fuziona .
Come posso fare per risolvere questo problemone ?
Ogni suggerimento è ben accetto !
Ringrazio anticipatamente !



Registrato
paooolino
Full Member
***

Karma: +16/-10
Scollegato Scollegato

Messaggi: 380

Ideas in programming


Mostra profilo WWW
« Risposta #1 inserita:: Marzo 11, 2017, 01:57:38 »

A parte il titolo del post che non capisco cosa c' entri, in ogni caso ti basta aggiungere un backslash prima delle virgolette doppie

 \"

Non ti scrivo un esempio completo perché sono col cell
Registrato

beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #2 inserita:: Marzo 11, 2017, 02:11:09 »

Aggiungere lo \" si può fare quando scrivi una stringa , ma quando la leggi da dentro le virgolette è diverso .
Esempio io volevo leggere la stringa "Giu"s"eppe" , e non  "giu\"s\"eppe" .
Quando tenti di leggere o assegnare la prima stringa del primo esempio il computer mi da un errore !
Io vorrei se è possibile intercettare tale errore o disabilitarlo !
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #3 inserita:: Marzo 11, 2017, 03:15:39 »

Non che sia una novità beppo, ma non capisco cosa intendi.

Se scrivi

   char s[] = "Gius\"e\"ppe";
   printf("%s\n", s);

ottieni quello che cerchi.

Ovvero nel caso che avevi presentato

printf("%s",join(3,"dddd",prova,"printf(\"xxx\");","kkkkk"));



Non capisco veramente ...
Registrato
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #4 inserita:: Marzo 11, 2017, 03:55:19 »

Beppo, neppure io capisco. La prima cosa che mi sfugge è LO SCOPO di tutto questo. Magari una volta capito dove vorresti arrivare sarebbe possibile anche capire quale percorso indicarti. Ad esempio, una cosa che mi lascia perplesso è il motivo per il quale crei quella funzione join()... Qual è la sua utilità, visto che esiste già sprintf() tra le funzioni della libreria standard?
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #5 inserita:: Marzo 11, 2017, 04:52:08 »

AldoBaldo ... tu non sei abituato alla "programmazione creativa" di beppo ...

Per lui quello che si fa in C da quarant'anni non conta nulla ... ha un suo concetto di programmazione con il linguaggio C ... assolutamente suo ...
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #6 inserita:: Marzo 11, 2017, 05:48:30 »

Probabilmente mi sono spiegato male !
Mi serve qualcosa che mi assegni ad una variabile stringa il contenuto di ciò che è contenuto nelle virgolette più esterne (così come sono riportate da me !
Esempio "printf("beppo");" .
Il computer in fase di buldin mi da errore , è non ce verso di ingannarlo .
Se io scrivo char a[]="giu"s"eppe"; il computer mi da errore . Io vorrei saper intercettare tale errore o disabilitarlo .
Come posso fare ?
Registrato
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« Risposta #7 inserita:: Marzo 11, 2017, 06:36:29 »

Citazione
Mi serve qualcosa che mi assegni ad una variabile stringa il contenuto di ciò che è contenuto nelle virgolette più esterne (così come sono riportate da me!

Nel senso che se scrivi "Gius"ep"pe" la variabile stringa di cui parli, dopo l'elaborazione dovrà contenere "Giuspe"?

Citazione
Il computer in fase di buldin mi da errore, è non ce verso di ingannarlo.
A parte che è il debugger che da' l'errore o il preprocessore in fase di precompilazione; certo che non c'è verso: gli strumenti che utilizzi sono fatti apposta!!
Tra l'altro non è che devi ingannarlo: stai semplicemente codificando male la tua idea.

Citazione
Se io scrivo char a[]="giu"s"eppe"; il computer mi da errore . Io vorrei saper intercettare tale errore o disabilitarlo .
Ti sei chiesto come mai?
Io non programmo in C/C++ ma se non sbaglio stai dichiarando un array e non credo che utilizzi il modo di popolarlo corretto.
Se così non fosse e si trattasse di una stringa, dovresti renderti conto da te che esistono dei manuali che vanno almeno letti (...) soprattutto per quanto riguarda le basi (ad esempio l'assegnazione di una variabile).
Registrato

01000100 01100101 01110110 00101101 00110000 00110001
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #8 inserita:: Marzo 11, 2017, 06:38:26 »

FORSE ho capito, tiro un po' a indovinare... vorresti una funzione che ti restituisse la stringa "s" estratta dalla stringa "giu\"s\"eppe"? (incrocio le dita)
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #9 inserita:: Marzo 11, 2017, 06:39:49 »

Continui a non spiegarti.

Di QUALE ERRORE parli?

E NON si può tirare ad indovinare ... bisogna spiegarsi !

Citazione
Se io scrivo char a[]="giu"s"eppe"; il computer mi da errore .

Ovvio perché devi scrivere

char a[]="giu\"s"eppe";

NON puoi intercettare un errore di compilazione. Non ha nessun senso.

Tu INSISTI con la questione del "DIRECT MODE" ma non capisci che dovresti lasciar perdere ...
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #10 inserita:: Marzo 11, 2017, 06:54:55 »

Dalla tua risposta ho capito che non è possibile .
per l'istruzione : char a[]="asd"dd"asd";
L'errore è : C:\Users\gi\Desktop\Untitled1.c|4|error: expected ',' or ';' before 'dd'|

Grazie lo stesso !
Registrato
DEV-01
Full Member
***

Karma: +11/-23
Scollegato Scollegato

Messaggi: 472

Me.Shift ^(n)


Mostra profilo E-mail
« Risposta #11 inserita:: Marzo 11, 2017, 07:02:58 »

Mah! Posso supporre che esistano funzioni di manipolazione delle stringhe in C/C++?

E poi perché "Grazie lo stesso"?
Non è che non è stato in grado di aiutarti, anzi...
Registrato

01000100 01100101 01110110 00101101 00110000 00110001
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #12 inserita:: Marzo 11, 2017, 07:13:18 »

Dalla tua risposta ho capito che non è possibile .
per l'istruzione : char a[]="asd"dd"asd";
L'errore è : C:\Users\gi\Desktop\Untitled1.c|4|error: expected ',' or ';' before 'dd'|

Grazie lo stesso !

E insisti !!! Devi scrivere

char a[]="asd\"dd\"asd";

beppo .... fai finta di non leggere???
Registrato
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #13 inserita:: Marzo 11, 2017, 07:14:09 »

per l'istruzione : char a[]="asd"dd"asd";
L'errore è : C:\Users\gi\Desktop\Untitled1.c|4|error: expected ',' or ';' before 'dd'|

Significa che quando "apri" una stringa con le virgolette, appena vengono incontrate nuovamente le virgolette si suppone che la stringa sia "finita", per cui il compilatore si aspetta che segua un'istruzione "virgola" (ovvero, dopo aver fatto una cosa fanne un'altra dello stesso tipo) oppure un'istruzione "punto e virgola" (ovvero, abbiamo finito con questa operazione). Se tu dopo le virgolette che "chiudono" scrivi qualcos'altro (in questo caso "dd"), il compilatore si chiede "e ora cos'è questa roba?" e si lamenta.

Come ti è già stato fatto notare, se vuoi usare delle virgolette all'interno di una stringa devi trasformarle in una sequenza di escape, tipo '\"'. A quel punto, il compilatore "capisce" che non stai chiudendo la stringa, ma stai inserendo un carattere di virgolette all'interno di una stringa già "aperta".

P.S. Ho usato "aperto" e "chiuso" in riferimento alle stringhe in modo improprio, ma l'ho fatto apposta per essere meno tecnico, più accessibile. Consideralo, se vuoi, un nuovo linguaggio: il parlacomemangese.
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #14 inserita:: Marzo 11, 2017, 07:15:14 »

Mah! Posso supporre che esistano funzioni di manipolazione delle stringhe in C/C++?

Certo che esistono!

E quello che vuole beppo si fa in un certo modo, ma lui è un "muro di gomma" ...

Registrato
Pagine: [1] 2 3   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines