2

我希望用字符','分割一个“字符串”。该字符串包含一个 GPS NMEA 编码字符串,但这无关紧要。

我的问题是,有时处理这个 char 数组的函数的参数是空的......就像数组中没有任何东西一样。

我应该如何正确地将“char string[]”传递给一个函数,以便我可以在发送它时对那个参数进行操作(作为一个 char 数组,而不是一个指向数组的 char 指针)。

我还需要指定我正在使用 mikroC 进行 PIC。

这是我现在的代码:

char* GPS_sateliti;
char CsatInView[] = 
"$GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74";

GPS_sateliti = GrupeazaDupaVirgule(CsatInView, 2);

char* GrupeazaDupaVirgule( char deGasit[],int nrVirgule ){
    int cVirgule = 1;
    char* pch = strtok (deGasit,",");

    while (pch != 0)
    {
       pch = strtok (0, ",");
       cVirgule++;
       if(nrVirgule == cVirgule){
          break;
    }
}
return pch;
}

对在调试模式下作为参数接收的char数组进行操作的函数,在进入函数之前char数组是可以的,进入之后,它似乎是空的 对在调试模式下作为参数接收的char数组进行操作的函数,在进入函数之前char数组是可以的,进入之后,它似乎是空的

可能我应该收到一个指向字符数组的指针?欢迎任何形式的建议。谢谢

4

2 回答 2

2

我应该如何正确地将“char string[]”传递给一个函数,以便我可以在发送它时对那个参数进行操作(作为一个 char 数组,而不是一个指向数组的 char 指针)。

你不能。数组类型的函数参数总是衰减为对应的指针类型。

对此有两种惯用的解决方案。

1. 哨兵:

数组中的最后一个值是标记结束的特殊值。这是在 C 中使用字符串完成的。它们总是以一个\0字符结尾,保证不会出现在字符串中。该函数可以搜索该字符以了解数据的结束位置。

(注意:有了这个信息我必须添加我不确定你的问题是什么。如果你传递一个“空字符串”,字面意思是""\0将会在那里,所以你不应该有问题)

2.显式传递大小:

而不仅仅是

void foo(int bar[]);

你定义一个函数

void foo(size_t barSize, int bar[]);

调用者知道数组的大小,所以它可以传递它。

于 2017-06-01T12:50:26.460 回答
0

用指针:

char* arr; 
yourFunction(arr);

如果你想在之前初始化它:

char* arr = malloc(51 * sizeof(char)); // Allocate a memory place of 50 because strings are null terminated in C
yourFunction(arr);

将内存分配给数组的另一种方法:

char* arr = calloc(50, sizeof(char)); // Allocate 50 memory place which size if the size of a char

用一个字符串:

char arr[50];
char* ptr = arr;
yourFunction(ptr);

您必须知道在 C 中使用指针时不可能知道数组的大小。您唯一能做的就是将字符串的大小解析为参数:

size_t size = 50;
char arr[size];
char* ptr = arr;
yourFunction(ptr, size);

如果您想详细了解指针的工作原理以及如何迭代它们,这篇文章可能对您有所帮助。我认为这很有趣。在全球范围内,您通过这样的指针遍历数组:

for ( int i = 0; i < size; i++)
    printf("Current pointed value in the array : %c\n", ptr[i]); // or arr[i]

我想您明白为什么size将指向数组的 指定为参数很重要。有时你可以避免像这样使用这个参数:

for ( int i = 0; i != '\0'; i++) // Because strings are null-terminated in C.
    // Do something
于 2017-06-01T12:55:02.667 回答