2013-09-27 198 views
0

傢伙大概這是一個愚蠢的問題,我搜索了很多網站,但我的程序不能正常工作:(INT到字符串連接

我從連接到樹莓派一個MCP3008讀了一些值,然後我給他們到PureData的使用這個python腳本:

os.system("echo '" + value + ";' | pdsend 3000 localhost") 

其中「值」包含了從傳感器讀數 但劇本是太慢了,所以我決定移動到C

int main() { 
    for (; ;) 
    { 
    int value = mcp3008_value(0, 18, 23, 24, 25); 
    char message[]=""; 
    char str[50]; 
    sprintf(str, "%d", value); 
    strcpy(message, "echo '"); 
    strcat(message, str); 
    strcat(message, ";' | pdsend 3000 localhost"); 
    printf(message); 

    } 
    return 0; 

} 

但當我執行它時,我得到:分割錯誤

是否有一個簡單的方法來連接int和字符串,就像在python中一樣? 你認爲它會比python更快嗎?

感謝球員;)

+0

'mcp3008_value'是一個函數嗎? – haccks

+0

是的,它在我已經包含的.h文件中定義;) – Wateredge

+0

因爲python只會轉身使用c系統調用,所以在py中系統調用的速度不會太快。你有沒有嘗試過看你的python實現爲什麼很慢?例如'「echo'%s;' | pdsend 3000 localhost「%value」應該更快,然後連接字符串 – cmd

回答

2

您的

char message[]=""; 

線是錯誤的。

你需要爲它分配內存,因爲它只會分配1個字節。您可以使用以下

char message[1000]=""; 
1

此:

int value = mcp3008_value(0, 18, 23, 24, 25); 
char message[]=""; 
char str[50]; 
sprintf(str, "%d", value); 
strcpy(message, "echo '"); 
strcat(message, str); 
strcat(message, ";' | pdsend 3000 localhost"); 
printf(message); 

可以更好(更快,更短,更清晰)寫爲:

char message[512]; 
const int value = mcp3008_value(0, 18, 23, 24, 25); 

sprintf(message, "echo '%d;' | pdsend 3000 localhost", value); 

這建立在字符串中單個呼叫。如果你擁有了它(我不知道有關PI),你應該使用snprintf()更多的保護:

snprintf(message, sizeof message, "echo '%d;' | pdsend 3000 localhost", value); 

但我認真疑問,處理該位是你的瓶頸。它可能是開始(通過system())兩個新進程的行爲,以便實際上傳輸一個整數,這會損害您的性能。

研究與Pd交談的其他方式,即每次您想發送內容時都不會產生新的pdsend

0

錯誤發生在的行:

strcpy(message, "echo '"); 

因爲消息緩衝器是隻有一個字節的大小。