2014-01-06 72 views
0

這個程序是用來讀取一個字符串並顯示字符串,但它不打印出任何東西因爲某些原因..功能不工作,不能找到我的錯誤

功能打印字符串,並使用指針讀取字符串和數組:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 


void read_string (char s[]); 
void display_string(char s1[]); 

int main() 

{//begin main 
    char string1[100]; 
    do 
    { 
     read_string(string1); 
     puts("the string entered is \n"); 
     display_string(string1); 
    } while(string1[0]); 

    return 0; 
}//end main 

void read_string (char *s) 
{ 
    int i; 
    char c; 
    for(i = 0;(c = getchar())!= '\n' ; i++) 
     s[i] = c; 
    s[i] = NULL; 
} 

void display_string(char *s1) 
{ 
    int i; 
    char c; 
    for (i =0; s1[i]; i++) 
    { 
     s1[i] = c; 
     putchar(s1[i]); 
    } 
    putchar('\n'); 
} 
+3

歡迎來到Stack Overflow!請縮進您的代碼以使其可讀。謝謝。 –

回答

3

的display_string方法重載與C字符串(即初始化)

刪除它,使其工作。

void display_string(char *s1) 
{ 
    int i; 
    for (i =0; s1[i]; i++) 
    { 
     putchar(s1[i]); 
    } 
    putchar('\n'); 
} 
1

在功能display_string()刪除行s1[i] = c;,它沒有任何用處。

同時爲char指定一個NULL值是不正確的。要終止陣列簡單地把s[i] = 0;

1

它看起來像你的display_string函數需要一點工作。您正在覆蓋字符串的內容而不是打印它。可能需要了解如何啓用更多編譯器警告。你有一個明顯的錯誤,即編譯器應該能夠爲你診斷。

1
void display_string(char *s1) 
{ 
    int i; 
    char c; 
    for (i =0; s1[i]; i++) 
    { 
     s1[i] = c; 
     putchar(s1[i]); 
    } 
    putchar('\n'); 
} 

在這個函數中,你用一些未定義的c值覆蓋字符串字符,然後嘗試打印出來。你應該做的只是打印出來。

此外,你的代碼很難閱讀,因爲你把??聰明?超過易讀性這是非常非常不好的習慣。我的意思是while(string1[0]);等。如果你使用這樣的東西 - 至少發表評論。我非常懷疑,如果您必須在一個月,一年甚至更多時間內返回代碼才能更改某些內容,您將會記住這意味着什麼。

0

的人回答你問的問題,而是你read_string有一些缺陷: 首先,該函數不知道你的緩衝區有多大,它需要一個額外的參數:

void read_string(char *s, size_t length); 

- 這意味着,你應該的i申報改爲

size_t i; 

-and此功能需要檢查緩衝區指向s溢出,像:

for(i=0; i<size-1 && (c=getchar())!='\n'; ++i) /* ... */ 

getchar也返回EOF,這可能是不能表示爲一個char(如果char在你的平臺上簽字,這甚至可能引入不確定的行爲),所以您應將申報改爲

int c; 

並檢查EOF,像:

for(i=0; i<size-1 && (c=getchar())!=EOF && c!='\n'; ++i) /* ... */ 

和,(我不是知道這是符合標準的在所有的,至少,它的刺激性):

s[i] = NULL; 

應改爲

s[i] = 0; // or '\0', if you prefer 

你在這裏沒有用0指針。

HTH