2011-08-24 73 views

回答

6

寫一個循環:

char str[HUGE]; 
strcpy(str, argv[1]); 

for (int i = 2; i < argc; ++i) 
{ 
    strcat(str, " "); 
    strcat(str, argv[i]); 
} 

你應該先檢查argc至少爲1,並且最好能夠使用lenght限制功能strncpystrncat代替,並跟蹤每個的長度論據。

+0

很好的解決方案..謝謝 – user123456

+0

也許接受這個答案吧? (答案左邊的複選標記,在「向上箭頭號向下箭頭」的右邊) – Kaos

0

您可以通過arg陣列進行循環。類似於

strcpy(str, arg[1]); 
strcat(str, " "); 

for (i = 2; i < arg_array_size; i++) 
{ 
    strcat(str, arg[i]); 
    strcat(str, " "); 
} 
+1

如果你想要做第一個前面的麻煩,最好是在循環中獲得反轉的strcats,刪除最初的strcatr,就像在克雷克的解決方案中一樣...... – fvu

0

您不需要將返回值指定爲str。另外如果你的字符串存儲在一個靜態數組中,那麼它是不正確的。

使用下面的構造,你可以連接你想要的。

char str[MAX]; 

strcpy (str, ""); 

for (i=0; i<argc; i++) 
{ 
    strcat (str, argv[i]); 
    strcat (str, " "); 
} 

這裏argc保存了最大元素的數量。請注意,MAX應該足夠大以容納所有連接的字符串。你也可以做

char *str; 
str = malloc (sizeof (char) * MAX); 

動態地分配內存。當以這種方式分配時,請記住在完成字符串處理後釋放分配的內存。

1

循環FTW

for(i = 1; i < argc; i++) 
{ 
    str = strcpy(str, arg[i]); 
    str = strcat(str, " "); 
} 

請記住,這將在結尾處添加一個尾隨空格。您可以通過在該位置插入NUL字符來將其刪除。另外不要忘記在str緩衝區中分配足夠的空間,並且要放置一個終止的NUL字符。

1

您需要首先檢查所需存儲的長度。如果你有各種參數,正確的答案是使用循環。

int i; 
int needed = 1;      // plus end of string mark 

for(i = 1; i < argc; ++i) { 
    needed += strlen(argv[ i ]) + 1; // plus space 
} 

然後,你需要保留的內存所需要的量,並使用另一個循環,在連接字符串:

char * storage = (char *) malloc(sizeof(char) * needed); 

strcpy(storage, argv[ 1 ]); 

for(i = 2; i < argc; ++i) { 
    strcat(storage, " "); 
    strcat(storage, argv[ i ]); 
} 

最後,使用空間和自由吧。

printf("%s\n", storage); 
free(storage); 

希望這會有所幫助。

0
#include <stdio.h> 
#include <string.h> 

int main (int argc, char *argv[]) 
{ 
    int i; 
    int len = 0; 
    char *str = ""; 
    for(i=1; i<argc; i++) 
    { 
    len += strlen(argv[i]) + 1; 
    } 
    str = (char *)malloc(sizeof(char) * len); 
    for(i=1; i<argc; i++) 
    { 
    strcat(str, argv[i]); 
    strcat(str, " "); 
    } 
    printf("str = [%s]\n", cmds); 
    return 0; 
}