任務是將字串分成幾個欄位。每個欄位由“;”限制,cada campo é armazenado num array de strings 只有 PTR[0] 是正確的。我認為這是因為 *ptr[] 的地址分配。我怎樣才能做正確的分配?
int fields(char *line, char *ptrs[], int max_fields ){
int i=0;
int count = 0;
char *aux = line;
while(*line != '\0'){
if(*line == ';')
{
if(i<max_fields)
{
*line='\0';
ptrs[i]=aux;
i ;
aux=line ;
continue;
count ;
}
line ;
}
return count; // retorna o numero de campos totais
}
void print(char *teste2[]){
printf("PTR[0] = %s \n", teste2[0]);
printf("PTR[1] = %s \n", teste2[1]);
printf("PTR[2] = %s \n", teste2[2]);
}
int main() {
int nrCamposIden, campEsper=3;
//char frase[]= "teste; oi ; ze ; primeiro campo; ;terceiro campo \t; ; palavras do quinto campo 1234\n ";
char *teste2[100];
nrCamposIden = fields(frase,teste2,campEsper) ;
printf("Numero campos = %d \n", nrCamposIden);
print(teste2);
return 0;
}
預期產出
PTR[0] = teste
PTR[1] = oi
PTR[2] = ze
output i get
PTR[0] = teste
PTR[1] =
PTR[2] =
謝謝大家 :D
uj5u.com熱心網友回復:
- 通過添加缺失來修復語法錯誤,
}并確保帶有輸入資料的變數frase沒有被注釋掉。 - 引入了一個常量
MAX_FIELDS來保存最大數量的欄位,并在呼叫時使用它來調整結果陣列teste2和引數的大小。max_fieldsfields() count現在回傳找到了多少個欄位(可能是>= max_fields);在兩者之前注意i并且count正在計算分隔符的數量;而不是欄位。- 像你一樣走指標并沒有錯
*line,但是由于你需要當前找到的字串的開始和停止,使用兩個索引變數i和j. field()改為使用 afor()而不是while()回圈來強調這j是我們正在行走的索引。- 最后,添加一個 count
n引數來列印而不是硬編碼前 3 個引數。如果您仍然只希望前 3 個引數更改MAX_FIELDS為3:
#include <stdio.h>
#define MAX_FIELDS 100
unsigned fields(char *line, char *ptrs[], unsigned max_fields ) {
unsigned count = 0;
unsigned i = 0;
for(unsigned j = 0; line[j]; j ) {
if(line[j] == ';') {
if(count < max_fields) {
line[j] = '\0';
ptrs[count] = line i;
i = j 1;
}
count ;
}
}
if(*line) ptrs[count ] = line i;
return count; // retorna o numero de campos totais
}
void print(char *teste2[], unsigned n) {
for(unsigned i = 0; i < n; i )
printf("PTR[%u] = %s \n", i, teste2[i]);
}
int main() {
int nrCamposIden, campEsper=MAX_FIELDS;
char frase[]= "teste; oi ; ze ; primeiro campo; ;terceiro campo \t; ; palavras do quinto campo 1234\n ";
char *teste2[MAX_FIELDS];
nrCamposIden = fields(frase, teste2, campEsper) ;
printf("Numero campos = %d \n", nrCamposIden);
print(teste2, nrCamposIden < MAX_FIELDS ? nrCamposIden : MAX_FIELDS);
return 0;
}
這是輸出:
Numero campos = 8
PTR[0] = teste
PTR[1] = oi
PTR[2] = ze
PTR[3] = primeiro campo
PTR[4] =
PTR[5] = terceiro campo
PTR[6] =
PTR[7] = palavras do quinto campo 1234
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462781.html
