0

我正在尝试创建一个返回 int 的 C 函数,但在此过程中将填充作为变量传入的 char*。我正在尝试的一个基本示例是:

int myMethod(int input, char* output, int outMaxLen) {
    int outValue = input * 5;
    if (out < 10) strcat(output, "A small number");
    else if (out < 20) strcat(output, "A medium number");
    else strcat(output, "A large number");
}

在 main.c 中:

char* myMethodOutput;
int myMethodInt = myMethod(2, myMethodOutput, 15);
printf("%d %s", myMethodInt, myMethodOutput);

运行时,整数显示在屏幕上,但文本不显示。

outMaxLen 变量用于检查 char* 参数以确保它足够大以容纳输出字符串。

除了 strcat(),我还尝试了 strcpy() 和 strncpy(),但都无济于事。strcat() 不向控制台显示任何文本,并且 strcpy() 和 strncpy() 使用消息 EXC_BAD_ACCESS 调用调试器。

我已经通过使用 strcpy_s 函数在 Windows API 中成功地管理了这个,但我现在正在尝试使用 UNIX 机器。我可能错过了一些非常基本的东西!

4

4 回答 4

6

您需要先为指针分配一些内存,否则您只是在写入内存中的某个随机区域。例如:

char *myMethodOutput = malloc(256);
/* ... etc ... */


free(myMethodOutput);
于 2011-01-20T18:23:16.890 回答
1
char* myMethodOutput;

myMethodOutput = malloc(sizeof(char) * 200); //200 is example

不要忘记释放,也myMethod()应该是类型void

于 2011-01-20T18:23:30.773 回答
1

实际上,将参数命名为“缓冲区的长度”并不能创建足够长的缓冲区。

您没有为缓冲区分配任何内存;至少不在示例代码中。

于 2011-01-20T18:23:52.247 回答
0

在使用之前,您应该使用 malloc() 或其他东西为 myMethodOutput 分配一些内存。写入未初始化指针的位置不是一个好主意。

于 2011-01-20T18:26:06.220 回答