这里我有一个函数,在一个应用程序中多次调用此应用程序正在连续运行。
这里我采用1024个字符数组大小。
我在这里宣布char input[1024];
这是最好的方式
1) char input[1024];
2) char input[1024] = NULL;
如果我们使用此功能,这件事会在很多次之后不会产生任何内存问题。char input[1024];
我想可能在使用输入后我们必须使NULL?
或者在声明中我们必须将此事件声明为char input[1024] = NULL;
,以便下次调用它时,首先输入的时间为空,而不是占用任何内存。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
void do() {
char input[1024];
strcat(input,"ussp-push 04:18:0F:B1:48:B5@9");
strcat(input,"> dev/null&");
if(system(input) != 0)
{
printf("\nFailed command\n");
}
else
{
printf("\nSuccesss command\n");
}
}
答案 0 :(得分:2)
您的程序根本不会初始化input
。这可能导致缓冲区溢出,即使没有发生,您的程序可能会有不正确的结果。因此,您的代码会调用未定义的行为。
据推测,您实际上想要将input
初始化为空字符串。像这样:
char input[1024] = "";
完成此操作后,您对strcat
的通话将有效。
如果您不想初始化input
,那么您可以使用strcpy
代替第一个strcat
:
char input[1024];
strcpy(input, "ussp-push 04:18:0F:B1:48:B5@9");
如果您需要在代码中稍后将空字符串分配给input
,请执行以下操作:
input[0] = '\0';
您建议的代码char input[1024] = NULL
无效。它没有编译。
答案 1 :(得分:1)
由于您未在函数内部更改它,请将其设为static const
数组
void dostuff() {
static const char input[] = "ussp-push 04:18:0F:B1:48:B5@9> dev/null&";
if (system(input) != 0)
{
printf("\nFailed command\n");
}
else
{
printf("\nSuccesss command\n");
}
}
答案 2 :(得分:0)
strcat将字符串附加到另一个字符串,为此,它在目标字符串中搜索终结符char(\ 0)。由于您没有初始化目标字符串,因此它可能会也可能找不到\ 0。
只需初始化它,例如:
input[0]='\0';
答案 3 :(得分:0)
这不会导致内存问题。每次调用do()
时,将在堆栈上分配1024字节的数组;该内存将用于调用input
的中的do()
。当do()
返回时,将释放1024个字节,并在下次调用时分配(概念上)新的1024个集合。
在任何情况下char input[1024] = NULL;
都不是有效代码。如果您想初始化input
,请尝试使用char input[1024] = "";
之类的内容。