2013-09-27 153 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 '"); 

因为消息缓冲器是只有一个字节的大小。