2010-10-23 30 views
5

Mã này được cho là bỏ qua khoảng trắng và trả về một từ tại một thời điểm. Một vài câu hỏi về mã này: Khi mã được gửi đến từ * ++ = c; dòng tôi nhận được một bãi chứa lõi. Tôi đã viết dòng này một cách chính xác chưa? và trả về đúng. Và tôi có cần phân bổ bộ nhớ để lưu trữ từ không?Bỏ qua khoảng trắng và trả lại một từ tại một thời điểm trong C

//get_word 

int get_word(char *word,int lim){ 
int i=0; 
int c; 
int quotes=0; 
int inword = 1; 

while(
     inword && 
     (i < (lim-1)) && 
     ((c=getchar()) != EOF) 
    ){ 

    if(c==('\"')){//this is so i can get a "string" 
    if (quotes) { 
     inword = 0; 
    } 
    quotes = ! quotes; 
    } 
    else if(quotes){ //if in a string keep storing til the end of the string 
    *word++=c;//pointer word gets c and increments the pointer 
    i++; 
    } 
    else if(!isspace(c)) {//if not in string store 
    *word++=c; 
    i++; 
    } 
    else { 
    // Only end if we have read some character ... 
    if (i) 
     inword = 0; 
    } 
} 
*word='\0';       //null at the end to signify 
return i;        //value 

}

Trả lời

2

Nó không thể nói lý do tại sao lõi này bãi mà không nhìn thấy mã gọi get_word. Sự thất bại ở dòng bạn đặt tên ngụ ý rằng bạn đang truyền nó một cái gì đó không hợp lệ trong tham số đầu tiên. Không có gì sai với dòng đó trong và của chính nó, nhưng nếu word không trỏ đến bộ nhớ ghi đủ lớn để giữ ký tự đầu ra của bạn, bạn đang gặp rắc rối.

Câu trả lời cho câu hỏi của bạn về phân bổ bộ nhớ để giữ nó là có - tuy nhiên đây có thể là địa phương (ví dụ: mảng char trong biến cục bộ của người gọi, toàn cục hoặc dựa trên heap (ví dụ: char * wordHolder = malloc(wordLimit);). yêu cầu này hỗ trợ đoán rằng giá trị tham số 1 của bạn là vấn đề:

+0

Bạn có phiền không nếu tôi xóa bỏ giá trị trả về của 'malloc'? –

+0

@R .., mà không có lỗi này. 'trả về' void * ': lỗi C2440: 'khởi tạo': không thể chuyển đổi từ 'void *' sang 'char *' Chuyển đổi từ 'void *' thành con trỏ thành non-'void 'yêu cầu một thuật ngữ rõ ràng" –

+0

@Steve: Sau đó bạn có thể đang sử dụng trình biên dịch C++ để biên dịch mã C :) – fredoverflow

Các vấn đề liên quan