2013-11-05 41 views
0

所以我宣佈我的字符串是這樣的 keys [25] [50];值[25] [50];在c中打印字符串數組的值

我有一個以前的字符串,我在whitespaces分裂,然後將值分別存儲到鍵/值數組。問題出現在我想要分配一個字符串到數組中的某個位置,然後通過printf()打印出該值的時候。它始終爲空。我是否在字符串或打印的分配方面做錯了什麼?

strcpy(buff, buf); 
bufcopy = strtok(buff, " "); 
if (strcmp(job, "PUT") == 0) { 
    //keys[i] = bufcopy; 
    strcpy(keys[i], bufcopy); 
    printf("server received: %s", keys[i]); 
    i++; 
} 
+0

什麼'printf(「bufcopy:%s」,bufcopy);'show? – sdanzig

+0

它顯示正確的字符串。出於某種原因複製字符串會導致它爲空或其他值。 – cj1098

+1

*** ***真***代碼。你是說它在*這個**準確的***代碼中顯示「正確的字符串」?如:'printf(「bufcopy:%s」,bufcopy);'在'printf(「服務器收到:%s」,鍵[i])上方''?發佈展示您行爲的工作完整樣本。假設聲明(不在代碼中而不在*問題中)是正確的,那麼唯一的其他邏輯就是'buff'被聲明爲一個指針而不是一個緩衝區,並且沒有* real *代碼我也不能斷定。 – WhozCraig

回答

0

請糾正我,如果我錯了,但似乎你想在喜歡的輸入爲:命令行

PUT key value 

,並在你的數組保存這些鍵/值對

char keys[25][50]; 
char values[25][50]; 

如果這是你要完成的任務:

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

int main(){ 
    int i = 0; 
    char keys[25][50]; 
    char values[25][50]; 
    char buf[256], *bufcopy; 
    do{ 
    fgets(buf, 255, stdin); 
    bufcopy = strtok(buf, " "); 
    if (strcmp(bufcopy, "PUT") == 0) { 
     bufcopy = strtok(NULL, " "); 
     strcpy(keys[i], bufcopy); 
     bufcopy = strtok(NULL, " "); 
     strcpy(values[i], bufcopy); 
     printf("server received pair %d - Key: %s\tValue: %s\n", i, keys[i], values[i]); 
     i++; 
    } 
    }while(i<25); 
    return 0; 
} 

這將讀入輸入,直到您到達鍵/值數組的末尾並將它們保存到數組中。你必須連續調用strtok()才能在每個空間分割並獲得指向下一個單詞的指針(直到下一個空白)。有關它如何工作的更多信息,請參閱strtok()的參考資料。