我希望用字符',‘来分割“字符串”。该字符串包含一个GPS编码字符串,但这并不重要。
我的问题是,有时处理这个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数组是可以的,在输入它之后,它似乎是空的。

可能我应该收到一个指向字符数组的指针?任何建议都是受欢迎的。谢谢
发布于 2017-06-01 12:55:02
用指针:
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);如果您希望详细了解指针是如何工作的,以及如何迭代它们,this post可能会帮助您。我觉得很有趣。在全局范围内,您可以通过这样的指针遍历数组:
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-01 12:50:26
如何正确地将"char string[]“传递给函数,以便在发送参数时对其进行操作(作为char数组,而不是指向数组的char指针)。
数组类型的函数参数总是作为对应的指针类型衰减。
对此有两个惯用的解决方案。
1.哨兵:
数组中的最后一个值是一个标记结束的特殊值。这是在C中用字符串完成的。它们总是以一个\0字符结尾,这保证不会出现在字符串中。该函数可以搜索该字符以知道数据的结束位置。
(注:我必须补充一下这个信息,我不知道你有什么问题。如果您传递一个“空字符串”(字面意思是""__ ),那么\0就会出现,所以您应该没有问题)
2.显式传递大小:
而不是仅仅
void foo(int bar[]);定义一个函数
void foo(size_t barSize, int bar[]);调用方知道数组的大小,因此它可以直接传递它。
https://stackoverflow.com/questions/44307892
复制相似问题