2016-02-29 86 views
0

低於從第一個字符串中刪除最後一個字符,然後將它與第二個字符串連接的可接受方式?刪除最後一個字符,然後連接兩個字符串

char *commandLinePath = server_files_directory; 
commandLinePath[strlen(commandLinePath)-1] = 0; 

char fullPath[strlen(commandLinePath) + strlen(requestPath)]; 
strcpy(fullPath, commandLinePath); 
strcat(fullPath, requestPath); 

讓我們假設server_files_directory是好的(char *)並且已經初始化。

什麼,我擔心的是:如果刪除的部分是正確的,如果得到的FULLPATH的大小是正確的,等

+0

這取決於什麼'server_files_directory'是。例如,修改字符串文字是非法的。 – MikeCAT

+0

char * server_files_directory; –

+0

取消引用具有自動存儲持續時間或「NULL」的未初始化變量是非法的。 – MikeCAT

回答

2

這是不能接受的,因爲沒有空間來存儲終止空字符fullPath

聲明應該是(添加+1

char fullPath[strlen(commandLinePath) + strlen(requestPath) + 1]; 

UPDATE:替代方法不會破壞什麼是server_files_directory指出:

size_t len1 = strlen(commandLinePath); 
size_t len2 = strlen(requestPath); 
char fullPath[len1 + len2]; /* no +1 here because one character will be removed */ 
strcpy(fullPath, commandLinePath); 
strcpy(fullPath + len1 - 1, requestPath); 
+0

@ ajfbiw.s我認爲你應該考慮閱讀一本關於'C'的書,並去尋找'pointers'段落。 – Neijwiert

+0

@Neijwiert:nvm我現在明白了... –

+0

這個例子有一個缺陷。你能發現它嗎? – 2501

相關問題