2013-01-21 57 views
2

我想了解更多關於C的知識,我想知道是否有人可以澄清這裏發生了什麼。我得到一個編譯器警告:「警告:分配使得整數指針沒有投@味精[msglen + 1] =‘\ 0’」ansi-c:賦值使指針中的整數不會轉換

char *msg = NULL; 
int len = 10; 
int msglen = 0; 

while(<argument>) { 

msg = (char *)calloc(len, 1); 
strncpy(msg, <some string>, len); 
msglen = strlen(msg); 
msg[msglen+1] = "\0"; 

謝謝,我很欣賞你的幫助!

+2

您正在使用'strncpy()'。這幾乎可以肯定[不是最好的解決方案](http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not-safer-strcpy.html)。 –

+0

'msglen = strlen(msg);'有可能導致未定義的行爲,因爲'strncpy'通常不會終止。 –

回答

1

一個「\ 0」被視爲一個常量字符串,當你嘗試做msg[len - 1] = "\0"因此你得到消息的地址,該字符串被處以到位「轉換......」

而不是msg[len - 1] = '\0'

+0

感謝您澄清 – txcotrader

+0

+1的答案請,如果你認爲這有助於:-) @txcotrader –

2

您正試圖將指向字符串文字的指針指定爲char。更改雙引號"單引號'這樣的:

msg[len - 1] = '\0'; 

請注意,我爲len - 1該指數最後分配的字符改變msglen+1

+0

它似乎被初始化爲10,之後從未改變。但那會在該行之前出現問題。 – imreal

0
msg = malloc(len + 1); 
/* check return value here ... */ 
memcpy(msg, some_string, len); 
msg[len] = 0; 
msglen = strlen (msg); /* this is to catch premature NULs */ 
相關問題