C指针char数组到char数组

时间:2014-05-12 14:40:31

标签: c arrays pointers

如何访问指针字符数组中的各个字符? 我有一个可能看起来像这样的数组:

064951.000
A
2307.1256
N
12016.443
E
0.03
165.48
260406

在调用我的函数的函数中:

char *parsedString[9];
getParsedString(parsedString);

size_t len = strlen(parsedString[3]);
pos.latitude = parseCoordinatePart(len, parsedString[3]);

这是我在理解如何操作时遇到问题的功能:

double parseCoordinatePart(int len, char partArray[]){
   if(len == 8){
       degrees = 10 * partArray[0] - '0';
       degrees += partArray[1] - '0';

   }else if(len == 9){
       indexAdd = 1;
       degrees = 100 * partArray[0] - '0';
       degrees += 10 * partArray[1] - '0';
       degrees += partArray[2] - '0';
   }
   //More calculations to get longitude or latitude 
}

虽然parseCoordinatePart()没有给出任何编译错误,但我无法从上面的函数中调用它。我的第一个想法是取消引用parsedString [3],但无论如何我试过它总是给我“非法转换整数到指针”

更新: 下面是设置parsedString数据的代码:

void splitNmeaString(char *parsedString[]){
char *token;
// remove the first token
token = strtok(receivedData, ",");

int tokenIndex = 0;
while( token != NULL )
{
    token = strtok(NULL, ","); // works when 1st arg is NULL. But why?!
    if(tokenIndex < 10 ){
        parsedString[tokenIndex] = token;
    }else{
        break;
    }
}
}

2 个答案:

答案 0 :(得分:1)

一个问题是您将无效值乘以其位置因子。由于乘法的优先级高于减法,因此在乘以数字前应将数字减去“0”:

double parseCoordinatePart(int len, char partArray[]){
   if(len == 8){
       degrees = 10 * (partArray[0] - '0'); //Here
       degrees += partArray[1] - '0';

   }else if(len == 9){
       indexAdd = 1;
       degrees = 100 * (partArray[0] - '0');
       degrees += 10 * (partArray[1] - '0');
       degrees += partArray[2] - '0';
   }
   //More calculations to get longitude or latitude 
}

您是否注意到parsedString[3]不是数字的字符串表示,而是基数点? N。 您的parseCoordinatePart分支都不会被执行。

答案 1 :(得分:1)

评论过多,但是:

除非您在getParsedString()中执行此操作,否则必须为代码char *parsedString[9];中的某个位置分配char *[9]的所有9个元素的内存

for(i=0;i<9;i++)
    {
         parsedString[i] = malloc(20);
    }  
你正在这样做吗?

编辑(每条评论)

当我分配内存并填充至少一个字符串进行测试时,函数调用时没有错误,如图所示:

int main ()
{
    //char *parsedString[9];
     //given that your system may not support malloc/calloc
    char parsedString[9][20];  //adjust second index if need more space

    parsedString[1] = malloc(20);
    //getParsedString(parsedString);  //not defined for me, comment

    strcpy(parsedString[1], "sdfgsd"); //fill with anything to test call

    size_t len = strlen(parsedString[1]);
     parseCoordinatePart(len, parsedString[1]); //calls without error given previous lines
     return 0;
}  

注意,我只分配了内存,并填充了char *parsedString[9];的九个元素之一来测试函数调用。它现在调用时没有错误显示。

我没有看到 getParsedString(parsedString);的定义,但怀疑你在那里进行内存分配和字符串推测?如果不是,那可能是问题的一部分。