首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C函数中接收char数组?

如何在C函数中接收char数组?
EN

Stack Overflow用户
提问于 2017-06-01 12:43:36
回答 2查看 6.4K关注 0票数 2

我希望用字符',‘来分割“字符串”。该字符串包含一个GPS编码字符串,但这并不重要。

我的问题是,有时处理这个char数组的函数的参数是空的.好像数组里什么都没有。

如何正确地将"char string[]“传递给函数,以便在发送参数时对其进行操作(作为char数组,而不是指向数组的char指针)。

我还需要指定我正在使用mikroC作为PIC。

下面是我现在的代码:

代码语言:javascript
复制
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数组是可以的,在输入它之后,它似乎是空的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-01 12:55:02

用指针:

代码语言:javascript
复制
char* arr; 
yourFunction(arr);

如果您希望在此之前初始化它:

代码语言:javascript
复制
char* arr = malloc(51 * sizeof(char)); // Allocate a memory place of 50 because strings are null terminated in C
yourFunction(arr);

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

代码语言:javascript
复制
char* arr = calloc(50, sizeof(char)); // Allocate 50 memory place which size if the size of a char

用绳子:

代码语言:javascript
复制
char arr[50];
char* ptr = arr;
yourFunction(ptr);

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

代码语言:javascript
复制
size_t size = 50;
char arr[size];
char* ptr = arr;
yourFunction(ptr, size);

如果您希望详细了解指针是如何工作的,以及如何迭代它们,this post可能会帮助您。我觉得很有趣。在全局范围内,您可以通过这样的指针遍历数组:

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

我想您理解为什么将指定数组的size作为参数是很重要的。有时,您可以避免像这样使用这个参数:

代码语言:javascript
复制
for ( int i = 0; i != '\0'; i++) // Because strings are null-terminated in C.
    // Do something
票数 0
EN

Stack Overflow用户

发布于 2017-06-01 12:50:26

如何正确地将"char string[]“传递给函数,以便在发送参数时对其进行操作(作为char数组,而不是指向数组的char指针)。

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

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

1.哨兵:

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

(注:我必须补充一下这个信息,我不知道你有什么问题。如果您传递一个“空字符串”(字面意思是""__ ),那么\0就会出现,所以您应该没有问题)

2.显式传递大小:

而不是仅仅

代码语言:javascript
复制
void foo(int bar[]);

定义一个函数

代码语言:javascript
复制
void foo(size_t barSize, int bar[]);

调用方知道数组的大小,因此它可以直接传递它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44307892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档