我有以下代碼:
void word(char *a){
size_t length = strlen(a);
int max_cont = 0;
int size_arr = 1;
for(int j = 0; j < length; j ){
if(a[j] == ' '){
size_arr ;
}
printf("For1 : %c\n",a[j]);
}
int arr_out[size_arr];
for(int y = 0; y<size_arr; y ){
arr_out[y] = 2;
}
for(int j = 0; j < length; j ){
if(j == 0){
arr_out[0] = 0;
}
printf("Char list for 2 ##:%c\n",a[j]);
if(a[j] == ' '){
arr_out[j] = (int) j;
printf("%d ---- %d\n", arr_out[j] ,j);
}
}
for(int k = 0; k < size_arr; k ){
printf("%i FINAL -> %d\n",k, arr_out[k]);
}
}
該函式獲取一個字串 (*a),我必須在其中查找空格 '',并回傳一個陣列,其中包含我傳遞給 word() 函式的每個單詞的起始位置。
第一個是獲取我將創建的陣列的大小。第二個是用于初始化值。我知道這是不必要的,但我試圖看看這些值發生了什么。在最后一個 for 中,我嘗試將陣列的第一個元素初始化為 0,因為至少有一個單詞并且它不以空格開頭,然后嘗試將陣列的每個值更改為 J 變數給我,顯示位置。
當我嘗試在最后一個回圈中列印陣列時,問題就來了。回圈顯示第一個 0 值已設定,但其余的仍為 2。我不明白發生了什么。
對不起這個糟糕的例子,這個問題更多地是針對正在發生的事情,而不是解決它自己的問題。
我的輸出總是這樣:
0 FINAL -> 0
1 FINAL -> 2
...
...
N FINAL -> 2
uj5u.com熱心網友回復:
這是一個盡可能少修改的解決方案。
void word(char *a){
size_t length = strlen(a);
int max_cont = 0;
int size_arr = 1;
for(int j = 0; j < length; j ){
if(a[j] == ' '){
size_arr ;
}
printf("For1 : %c\n",a[j]);
}
int arr_out[size_arr];
for(int y = 0; y<size_arr; y ){
arr_out[y] = 2;
}
int i_arr_out=1;
for(int j = 0; j < length; j ){
if(j == 0){
arr_out[0] = 0;
}
printf("Char list for 2 ##:%c\n",a[j]);
if(a[j] == ' '){
arr_out[i_arr_out] = (int) j;
i_arr_out ;
printf("%d ---- %d\n", arr_out[j] ,j);
}
}
for(int k = 0; k < size_arr; k ){
printf("%i FINAL -> %d\n",k, arr_out[k]);
}
}
一些小評論:
當有兩個或多個連續空格時,它不起作用。
(int)(arr_out[i_arr_out] = (int) j;)強制轉換沒有用,因為 j 是一個 int 而 arr_out 是一個 int 陣列
一些主要評論:
在您的代碼中,arr_out當 j 變得大于時,您在外面寫size_arr。它可能會導致邊界效應。試試這個代碼:
void myFoo() {
int size_arr=5;
int arr_out[size_arr];
int arr_out2[size_arr];
printf("%p\n",arr_out);
printf("%p\n",arr_out2);
for(int i = 0; i < size_arr; i ){
arr_out[i]=0;
arr_out2[i]=0;
}
for(int i = 0; i < 20; i ){
arr_out[i]=99;
}
for(int i = 0; i < size_arr; i ){
printf("arr_out2[%i] = %d\n",i, arr_out2[i]);
}
}
如果要在函式呼叫后取回arr_out陣列word,則必須在計算此陣列的大小后使用 malloc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416896.html
標籤:
上一篇:Python:垂直列印
下一篇:使用for回圈呼叫鏈式方法
