Newsgroup: it.comp.lang.c
Titolo: Aiuto semplice esercizio

Ho da poco iniziato a studiare il C con "Programmare in C guida completa" di
Aitken e Jones.
Nella maggior parte dei casi riesco a risolvere, in un modo o nell'altro,
gli esercizi dopo ogni capitolo.
Ho trovato qualche difficoltà però in un esercizio dopo il capitolo sulle
stringhe.
Si chiede di creare una funzione che conti i caratteri di due stringhe e
restituisca un puntatore alla stringa più lunga.
Dopo un bel pò che non riuscivo a risolvere il problema sono andato a vedere
la soluzione e mi sono accorto che c' erano alcune cose che non erano state
spiegate per niente.
----------------------------------------------------------
#include <stdio.h>
#include <string.h>
char *array2 (char *a, char *b);
int main ()
{
  char *str = "ABCDEFGHILMN";
  char *ptr = "ABCDEF";
  char *array;
  array = array2 (str, ptr);
  printf ("La stringa piu' lunga e' %s", array);
  getchar ();
  return 0;
}
char *array2 (char *a, char *b)
{
  int x, y;
  x = strlen (a);
  y = strlen (b);
  if (x > y)
  {
    return a;
  } else
    return b;
}
---------------------------------------------------------
Perchè nel prototipo e nell'intestazione della funzione prima del nome della
funzione c'è l'operatore di rinvio? Non basta specificare nei parametri che
gli argomenti passati alla funzione sono dei puntatori al tipo char ?
A cosa serve l'istruzione strlen ( ), da quello che vedo nel codice dovrebbe
restituire la lunghezza di una stringa vero ?

 restituire la lunghezza di una stringa vero ?
Esatto, purchè la stringa sia NULL-terminated (cioè ci sia
il terminatore nullo).
==========================
Stefano Frosio
http://www.esse-effe.com
==========================

 il terminatore nullo).
Probabilmente intendi terminata dal carattere '\0' (NULL e`
un'altra cosa).
Inoltre, una `stringa' e` sempre terminata dal carattere '\0',
per il semplice motivo che altrimenti non sarebbe una `stringa'.
-- 
Enrico `Trippo' Porreca

 per il semplice motivo che altrimenti non sarebbe una
`stringa'.
Assolutamente no. Esistono altri modi per trattare le
stringhe (puntatore e lunghezza ad esempio).


 stringhe (puntatore e lunghezza ad esempio).
Queste non sono le stringe C, le quali sono costituite da un
array di char terminato da '\0'. Il tuo e` un puntatore a char
con una lunghezza associata. E` un'altra cosa (infatti le
funzioni standard non accettano qualcosa del genere).
-- 
Enrico `Trippo' Porreca

 > No, intendo proprio quello che ho scritto,
NULL-terminated.
Qualche link a supporto (giusto per non scomodare i manuali
di C):
http://www.marcocantu.it/EPascal/ch07str.htm
http://developer.novell.com/ndk/doc/samplecode/wancomp_sampl
e/pclass_src/parse.c.html
http://chortle.ccsu.edu/AssemblyTutorial/Chapter-20/ass20_2
.
html
Saluti,


 html
Questo e` Assembly, non C. Le stringhe in Assembly puoi
implementarle come vuoi, in C il modo standard e` uno solo.
-- 
Enrico `Trippo' Porreca

stringhe (puntatore e lunghezza ad esempio).
???

 che nome abbia.
From Borland Help [strlen]:
Return Value
strlen returns the number of characters in s, not counting the
null-terminating character.
From Borland Help [cgets example]:
<snip>
    char buffer[83];
    /* There's space for 80 characters plus the NULL terminator */
    buffer[0] = 81;
<snip>
    /* Leave room for 5 characters plus the NULL terminator */
    buffer[0] = 6;
*** Orlando ***
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it