如何访问指针字符数组中的各个字符? 我有一个可能看起来像这样的数组:
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;
}
}
}
答案 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);
的定义,但怀疑你在那里进行内存分配和字符串推测?如果不是,那可能是问题的一部分。