我是 C 編程語言的新手,而 malloc 正是如此。所以我創建了這個程式來從 argv 獲取引數并將它們全部放在一個字串中,用空格分隔(在第 32 行)。但是當我運行它時,一切正常,但在下面的代碼中似乎沒有插入所需的空格。
當我嘗試評論時,第 28 行:buffer[t] = argv[str][i];出現空格。
我還嘗試了強制轉換:在將其分配malloc(buffSize)給(char*)緩沖區之前,看看是否有任何變化……。但什么都沒有。
如果有人能幫我弄清楚發生了什么,我會很高興。提前謝謝????
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str = 0, i = 0, t = 0, letterCount = 0, buffSize;
char *buffer;
char *argv[] = {"hello", "me", "too"};
int argc = 3;
while (str < argc)
{
while (argv[str][i ])
letterCount ;
str ;
i = 0;
}
buffSize = letterCount argc 1;
str = 0;
buffer = (char*) malloc(buffSize);
if (!buffer)
return (NULL);
while (str < argc)
{
while (argv[str][i] != '\0')
{
buffer[t] = argv[str][i];
t ;
i ;
}
buffer[t] = ' ';
str ;
i = 0;
}
printf("%s", buffer);
return (0);
}
uj5u.com熱心網友回復:
實際上,你沒有在你的問題中提到什么ac和av代表什么,所以我從代碼中洗掉了它們并用它們的等效數字替換它們。
你正在做很多詳盡的編程,而不是使用像strlen()and這樣的函式strcat(),而是手動實作它,但無論哪種方式,它都是你的選擇。
buffer[t] = ' ';當您將字符放入新陣列時,您在這一行中遇到的問題,' '但實際上并沒有增加用于放置字符的索引t,這就是為什么空格字符總是被下一個字符覆寫,所以,您應該這樣做buffer[t ] = ' ';- 最后,您正在列印
printf("%s", buffer);,但實際上呼叫的變數buffer從未被 null char 終止'\0',所以最后您應該這樣做buffer[t] = '\0';
這就是我在您的代碼中編輯的全部內容,但您的代碼實際上需要再次重寫,這是經過編輯的代碼,僅進行了 2 處修改:
#include <stdio.h>
#include <stdlib.h>
#define NUM_OF_SPACES 3
int main()
{
int str = 0, i = 0, t = 0, letterCount = 0, buffSize;
char *buffer;
char *argv[] = {"hello", "me", "too"};
int argc = 3;
while (str < argc)
{
while (argv[str][i ])
letterCount ;
str ;
i = 0;
}
buffSize = letterCount NUM_OF_SPACES 1;
str = 0;
buffer = (char*) malloc(buffSize);
if (!buffer)
return (0);
while (str < argc)
{
while (argv[str][i] != '\0')
{
buffer[t] = argv[str][i];
t ;
i ;
}
buffer[t ] = ' ';
str ;
i = 0;
}
buffer[t] = '\0';
printf("%s", buffer);
return (0);
}
這是輸出:
hello me too
uj5u.com熱心網友回復:
但是當我運行它時,一切正常,但在下面的代碼中似乎沒有插入所需的空格。
正如評論中指出的那樣,您不太可能運行問題中提供的代碼,因為它不是有效的 C。
但是如果你運行一個類似的程式并得到你描述的結果,那么仔細看看這兩條代碼:
buffer[t] = argv[str][i]; t ; i ;
和
buffer[t] = ' '; str ; i = 0;
您是否看到解釋問題的這些之間的重要區別?前者做了哪些后者沒有做的事情?您是否注意到雖然您的程式不列印單詞之間的空格,但它(我希望)在最后一個單詞之后列印一個空格?
這不是您的代碼的唯一問題,但請在那里尋找您當前問題的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507332.html
上一篇:將空位元組放在C陣列的末尾
