我是c编程的新手,我想从库中传递数组。 我在库c文件中有函数创建char数组。如何在main函数中使用此数组。这是我尝试过的简短代码:
libfile.c
char *myArray;
void PopulateArray()
{
// Getting data from serial port in char buffer[100]
myArray = buffer;
}
libfile.h
exter char *myArray;
void PopulateArray();
program.c
int main()
{
// in fore loop
printf("%s\n" , myArray[i]);
}
这只是我尝试过的一种组合,但没有任何效果。 怎么做?
答案 0 :(得分:1)
要将数组从库函数传递给周围的代码,可以使用函数的返回值或使用指针到指针的参数。
请参阅以下示例代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* createSourceCopy() {
const char *source = "Example Text";
// We got some text in variable source;
const size_t sourceSize = strlen(source);
char *result = (char*)malloc(sizeof(char)*(sourceSize+1));
strncpy(result, source, sourceSize);
return result;
}
您图书馆的用户可以使用以下功能:
main() {
char *result = createSourceCopy();
// Do something with result.
// After the use, destroy the array
delete[] result;
return 0;
}
如何传递数组的另一种方法是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
bool copySourceText( char **outText ) {
const char *source = "Example Text";
// We get some text in variable source;
const size_t sourceSize = strlen(source);
*outText = new char[sourceSize];
strncpy(*outText, source, sourceSize);
return true; // success
}
第二种变体的好处是返回值可以用作状态。该函数可以在成功时返回true
,如果有错误则返回false
。
第二个版本可以像这样使用。
int main() {
char *result;
if (copySourceText(&result)) {
// Do something with result.
// After the use, destroy the array
free(result);
result = NULL;
} else {
// Error handling
}
return 0;
}
答案 1 :(得分:0)
目前尚不清楚您发布的代码到底出了什么问题(这有助于查看更多代码),但假设您的问题不是编译错误,其中一行可能是错误的:
char *myArray;
printf("%s\n" , myArray[i]);
char *myArray
声明一个指向char的指针(适用于单个字符串)。
printf
行解除引用myArray
(生成char
,即一个字符。您传递的是char
,但%s
格式需要指针指向char
。
如果您想逐个字符地打印字符串,可以使用%c
:
for (i = 0; i < length; i++) {
printf("%c\n", myArray[i]); /* or %x or %d if you want */
}
否则,如果myArray
是一个字符串且以空值终止(请参阅Why is a null terminator necessary?),那么您可以这样做:
printf("%s\n" , myArray); /* [i] removed, no for loop necessary */