2016-09-26 44 views
-8

我必須打印兩個不同的字符串,但它崩潰了! 所以,我認爲我在編程方面失敗了,但我是新手,我不知道該怎麼做!下面是代碼:C編程printf

#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
    char nome1,nome2; 
    int num1,num2; 
    printf("inserisci il nome del primo giocatore "); 
    scanf("%s",&nome1); 
    printf("inserisci il nome del secondo giocatore "); 
    scanf("%s",&nome2); 
    printf("i giocatori sono: %s,%s", nome1,nome2); 
    getch(); 
    return 0; 
} 
+2

除非你輸入一個空字符串,'scanf()的單曲展覽未定義的行爲訪問越界。 – EOF

+0

嘗試使用'%c'而不是'%s' – Hackerman

+0

閱讀[緩衝區溢出](https://en.wikipedia.org/wiki/Buffer_overflow) – Mirakurun

回答

1

你需要一些存儲分配給您所定義nome1變量,nome2

所以,與其把這種方式:

char nome1,nome2; 

分配一些內存對這些變量

char nome1[100],nome2[100]; 

Moreove R,以防止緩衝區溢出,使用fgets代替scanf

fgets(nome1, 100, stdin); 

所以,你的代碼是這樣的:

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

int main(void) 
{ 
    char nome1[100],nome2[100]; 
    int num1,num2; 
    printf("inserisci il nome del primo giocatore "); 
    fgets(nome1, 100, stdin); 
    printf("inserisci il nome del secondo giocatore "); 
    fgets(nome2, 100, stdin); 
    strtok(nome1, "\n"); //removing the newline. 
    printf("i giocatori sono: %s,%s", nome1,nome2); 
    getch(); 
    return 0; 
} 
+1

不要忘記刪除換行符。 – Barmar

+0

@Barmar,加:) –