2014-10-17 174 views
-1

如何將單引號連接到C中的字符數組?將單引號添加到C中的字符串中

例如:我有一個字符數組FileName,值爲"hello world"。我想用這樣的單引號括起你好世界:"'hello world'"。該函數已通過FileName,所以我無法將數組初始化爲所需的值。我必須在字符串的開始和結尾連接單引號。

+1

您嘗試了什麼?你知道[snprintf(3)](http://man7.org/linux/man-pages/man3/snprintf.3.html)嗎? – 2014-10-17 20:00:53

+2

或[strcat](http://www.techonthenet.com/c_language/standard_library_functions/string_h/strcat.php)? – aruisdante 2014-10-17 20:03:02

+0

strcat不起作用。當我嘗試strcat時出現分段錯誤。 – user3592590 2014-10-17 20:05:27

回答

1

爲了使它正常工作,調用者需要傳遞一個字符串,該字符串有足夠的空間用於兩個額外的引號。使這項工作的一種方式是分配一個臨時緩衝區,構建新的字符串那裏,回其複製到原始字符串,像這樣:

void add_quotes(char *s) { 
    size_t len = strlen(s); 
    char tmp[len+3]; 
    tmp[0] = '\''; 
    strcpy(tmp+1, s); 
    tmp[len+1] = '\''; 
    tmp[len+2] = '\0'; 
    strcpy(s, tmp); 
} 

這種分配在自動存儲一個臨時緩衝區(即在堆棧)。如果您的字符串s可能較長,請考慮使用動態內存分配代替:

void add_quotes(char *s) { 
    size_t len = strlen(s); 
    char *tmp = malloc(len+3); 
    tmp[0] = '\''; 
    strcpy(tmp+1, s); 
    tmp[len+1] = '\''; 
    tmp[len+2] = '\0'; 
    strcpy(s, tmp); 
    free(tmp); 
} 
+0

這是無效的「C」 - 你不能聲明一個數組的長度保持在一個表達式中。 – Alnitak 2014-10-17 20:15:14

+2

@Alnitak嗯,什麼?爲什麼你不能使用VLA大小的表達式? – hyde 2014-10-17 20:19:58

+0

嗯,不是原來的。對於C標準的更新更新,我感到非常失望。看來這是合法的C99。然而,這並不高效,如果緩衝區保證足夠長的話,將字符串「inmove」替換爲臨時數組可以更簡單。 – Alnitak 2014-10-17 20:21:26