problema void

Master960

Utente Èlite
1,566
242
CPU
AMD Fx-6300
Scheda Madre
M5A97 LE R2.0
HDD
Maxtor 250gb 8mb cache 5400 RPM
RAM
1x4 Gb Kingston HyperX Red 1600Mhz CL9 LP
GPU
Sapphire 7790 OC Version Dual-X 1180Mhz
PSU
Coolermaster Gx-Lite 500W
OS
Windows 7 Professional
ciao a tutti,
la prof ha spiegato le funzioni e non ho capito come funziona il void quando si ha una stringa tra i dati.
Mi da due errori:
-mi dice arg 1 in function "" makes integer pointer without a cast
-mi dice arg 1 in fuction "" makes incompatible pointer.
cosa vuol dire ? @Tinwor
 
Ultima modifica:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Codice?
 
  • Mi piace
Reazioni: Master960

Master960

Utente Èlite
1,566
242
CPU
AMD Fx-6300
Scheda Madre
M5A97 LE R2.0
HDD
Maxtor 250gb 8mb cache 5400 RPM
RAM
1x4 Gb Kingston HyperX Red 1600Mhz CL9 LP
GPU
Sapphire 7790 OC Version Dual-X 1180Mhz
PSU
Coolermaster Gx-Lite 500W
OS
Windows 7 Professional
Codice:
#include <stdio.h>#include <stdlib.h>


void ripeti(char *stringa, int *num);


int main(int argc, char *argv[])
{
  int num;
  char stringa[50];
  
  printf("Inserisci il numero");
  scanf("%d", &num);
  
  printf("Inserisci la stringa");
  scanf("%s", stringa);
  
  ripeti(&stringa, &num);
  
  
  
  system("PAUSE");	
  return 0;
}
void ripeti(char *stringa, int *num)
{ 
          int i;
          for(i = 0; i < *num; i++)
          {
                printf("%s", *stringa);
          }


}
 

wolf1792

Utente Attivo
324
53
CPU
Intel i5 2320
Scheda Madre
AsRock P67 Pro3
HDD
WD caviar blue 500Gb
RAM
8 Gb Vegeance low profile
GPU
ATI HD6850
Monitor
Tv Samsung 24" Full-HD
PSU
XFX 450W
Case
Cooler Master 330
OS
windows 8/Ubuntu 13.04
l'errore non c'entra con la stringa in sè...ma con i puntatori..
La stringa è un vettore di caratteri, e i vettori vengono sempre passati alle funzioni per riferimento..per cui quando fai &stringa per passarlo alla funzione sbagli..
potresti fare anche così:
Codice:
[COLOR=#333333]

#include <stdio.h>#include <stdlib.h>[/COLOR]

void ripeti(char stringa[], int *num);


int main(int argc, char *argv[])
{
  int num;
  char stringa[50];
  
  printf("Inserisci il numero");
  scanf("%d", &num);
  
  printf("Inserisci la stringa");
  scanf("%s", stringa);
  
  ripeti(stringa, &num);
  
  
  
  system("PAUSE");    
  return 0;
}
void ripeti(char stringa[], int *num)
{ 
          int i;
          for(i = 0; i < *num; i++)
          {
                printf("%s", stringa);
          }


}
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Quando chiami la funzione
Codice:
void ripeti(char *, int *);
Essa si aspetta un puntatore ad un char ed un un puntatore ad int. Essendo un array un puntatore al primo elemento dello stesso (vale lo stesso per le stringhe, ossia array di char terminati con \0), passare &stringa indicherebbe passare l'indirizzo del puntatore e non l'indirizzo puntato dal puntatore.

Non pensare a qualcosa che non sai ancora, perché è come con scanf:
Codice:
[COLOR=#000000]printf("Inserisci la stringa");
[/COLOR][COLOR=#000000]  scanf("%s", stringa);[/COLOR]

Il compilatore, che immagino sia VC++ (i suoi messaggi di errore non sono chiarissimi, è vero), cerca di fartelo notare dicendoti: "mi dice arg 1 in fuction "" makes incompatible pointer.".

NB: printf("%s", *stringa) è sbagliato perché vi è un'ulteriore incompatibilità tra i tipi. Stai indicando a printf che il primo parametro è una stringa, quando in realtà è un carattere ( *stringa == stringa[0]).
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili