2014-01-06 16 views
0

這是我在c代碼。 我編譯並在ubuntu終端上運行它,並且最大長度(最大)被打印出來,但不是字符串(最長) - 它只是輸出一個零和一個小盒子。 我是編程初學者。 謝謝ubuntu終端的輸出是什麼,有一小盒零和一個?

#include<stdio.h> 
#define MAXLINE 1000 

int my_getline(char line[], int maxline); 
void copy(char to[], char from[]); 

main() { 
    int len; 
    int max; 
    char line[MAXLINE]; 
    char longest[MAXLINE]; 

    max = 0; 
    while ((len = my_getline(line, MAXLINE)) > 0) { 
     if (len > max) { 
      max = len; 
      copy(longest, line); 
     } 
    } 

    if (max > 0) 
     printf("%d\t %s \n",max, longest); 

    return 0; 
} 

int my_getline(char s[], int lim) { 
    int c, i; 

    for (i = 0; i < lim -1 && (c = getchar()) != EOF && c != '\n'; ++i) { 
     s[i] = c; 
    } 

    if (c == '\n') { 
     s[i] = c; 
     ++i; 
    } 

    s[i] = '\0'; 
    return i; 
} 

void copy(char to[], char from []) { 
    int i; 
    i = 0; 
    while ((to[i] == from [i]) != '\0') 
     ++i; 
} 

回答

1

copy例程不會複製任何東西。可能你的意思是使用=而不是==

對我而言,這些在控制表達式中使用任務的想法是一種非常糟糕的習慣,只會給您帶來麻煩。類似於

for(;;) { 
    to[i] = from[i]; 
    if (to[i]) ++i; 
    else break; 
} 

會更清晰。

0

您需要重新執行您的副本例程,因爲它沒有得到任何東西。一個簡單的解決方案如下:

strcpy(to, from); 

你需要包含string.h並調用它,而不是你的複製函數。如果你想實現刺痛複製自己,使用以下命令:

void copy(char * to, char * from) { 
    int i = 0; 
    while (from[i] != '\0') { 
     to[i] = from[i]; 
     i++; 
    } 

    to[i] = '\0'; 
} 

您需要確保該字符串是至少從字符串的大小相同。

+1

'到第[i + 1] = '\ 0';'是錯誤的,這寫一個位置,過去它被認爲。這將複製'from'中的每個字符,最後留下一個洞,並在其後插入''\ 0''。 '到[i] ='\ 0';'是你想要的。 –

+0

你說得對。抱歉。愚蠢的錯誤...:P – Xephon

+0

你爲什麼不編輯你的答案來解決這個問題? –

0

您的拷貝過程裏面,你想轉讓,沒有比較:

void copy(char to[], char from []) { 
    int i; 
    i = 0; 
    while ((to[i] = from [i]) != '\0') 
     ++i; 
} 
相關問題