C 我已经分配了足够的内存空间,但在写了大约69个字符后,我得到了访问冲突

C 我已经分配了足够的内存空间,但在写了大约69个字符后,我得到了访问冲突,c,arrays,char,C,Arrays,Char,我在调用控制台应用程序中有以下代码。代码是用C语言编写的 char list[500000]; int ret=0; ret = GetFeatures(".", list); 在方法GetFeatures(char*PATH,char featureList[500000])的dll实现中 在下面的代码段中,该方法在写入大约69个字符后抛出一个错误(访问冲突)。有人知道为什么吗 while (pos=0) { strcat(featureList, getFeatureName

我在调用控制台应用程序中有以下代码。代码是用C语言编写的

char list[500000];
int ret=0;
ret = GetFeatures(".", list);
在方法GetFeatures(char*PATH,char featureList[500000])的dll实现中

在下面的代码段中,该方法在写入大约69个字符后抛出一个错误(访问冲突)。有人知道为什么吗

while (pos=0)
{   
    strcat(featureList, getFeatureName());
    strcat(featureList, "|");
    strcat(featureList, getVersion);
    strcat(featureList, "|");
    strcat(featureList, getVS());
    strcat(featureList, ";");

    pos = isEnd();
}

[评论更新:]

pos=0
是个打字错误。

有几件事:

首先,您尚未初始化
列表中的内存。它可能包含任何内容,因此任何试图将其与strcat一起使用的尝试都是危险的,并且可能会意外崩溃

声明数组时,请改为执行以下操作:

char list[500000] = "";
其次,您的
while
循环应该是:

while (pos==0)
否则,您会将其重置为0。因此,
while
循环中的代码永远不会计算。

以下几点:

首先,您尚未初始化
列表中的内存。它可能包含任何内容,因此任何试图将其与strcat一起使用的尝试都是危险的,并且可能会意外崩溃

声明数组时,请改为执行以下操作:

char list[500000] = "";
其次,您的
while
循环应该是:

while (pos==0)
否则,您会将其重置为0。因此,
while
循环中的代码永远不会计算。

以下几点:

首先,您尚未初始化
列表中的内存。它可能包含任何内容,因此任何试图将其与strcat一起使用的尝试都是危险的,并且可能会意外崩溃

声明数组时,请改为执行以下操作:

char list[500000] = "";
其次,您的
while
循环应该是:

while (pos==0)
否则,您会将其重置为0。因此,
while
循环中的代码永远不会计算。

以下几点:

首先,您尚未初始化
列表中的内存。它可能包含任何内容,因此任何试图将其与strcat一起使用的尝试都是危险的,并且可能会意外崩溃

声明数组时,请改为执行以下操作:

char list[500000] = "";
其次,您的
while
循环应该是:

while (pos==0)


否则,您会将其重置为0。因此
while
循环中的代码永远不会计算。

什么是语言?抱歉,它是C语言什么是语言?抱歉,它是C语言什么是语言?抱歉,它是C语言为什么从未执行的
strcat()
失败了!也许这只是问题中的一个输入错误。虽然我完全同意并支持在第一次使用前初始化
char
-数组的建议,但为了完整性,我想提到的是,将第一次调用
strcat()
改为调用
strcpy()
,也可以解决这个问题。@alk:Yep,在之前的一次编辑中,我有过这样的想法——问题是,OP似乎打算使用while循环进行迭代——如果您将第一个调用更改为
strcpy
,则每次循环时都会重置字符串。“因此,任何将其与strcat一起使用的尝试都可能是非常有问题的。”不要说它会通过读取
字符
-数组的未初始化内存来调用臭名昭著的未定义行为。@Baldrick:啊,是的,当然。我错过了循环的上下文。因此,您是对的,在这种情况下,使用
strcpy()
将不是一个选项。我们想知道为什么从未执行的
strcat()
会失败!也许这只是问题中的一个输入错误。虽然我完全同意并支持在第一次使用前初始化
char
-数组的建议,但为了完整性,我想提到的是,将第一次调用
strcat()
改为调用
strcpy()
,也可以解决这个问题。@alk:Yep,在之前的一次编辑中,我有过这样的想法——问题是,OP似乎打算使用while循环进行迭代——如果您将第一个调用更改为
strcpy
,则每次循环时都会重置字符串。“因此,任何将其与strcat一起使用的尝试都可能是非常有问题的。”不要说它会通过读取
字符
-数组的未初始化内存来调用臭名昭著的未定义行为。@Baldrick:啊,是的,当然。我错过了循环的上下文。因此,您是对的,在这种情况下,使用
strcpy()
将不是一个选项。我们想知道为什么从未执行的
strcat()
会失败!也许这只是问题中的一个输入错误。虽然我完全同意并支持在第一次使用前初始化
char
-数组的建议,但为了完整性,我想提到的是,将第一次调用
strcat()
改为调用
strcpy()
,也可以解决这个问题。@alk:Yep,在之前的一次编辑中,我有过这样的想法——问题是,OP似乎打算使用while循环进行迭代——如果您将第一个调用更改为
strcpy
,则每次循环时都会重置字符串。“因此,任何将其与strcat一起使用的尝试都可能是非常有问题的。”不要说它会通过读取
字符
-数组的未初始化内存来调用臭名昭著的未定义行为。@Baldrick:啊,是的,当然。我错过了循环的上下文。因此,您是对的,在这种情况下,使用
strcpy()
将不是一个选项。我们想知道为什么从未执行的
strcat()
会失败!也许这只是问题中的一个输入错误。虽然我完全同意并支持在第一次使用前初始化
char
-数组的建议,但为了完整性,我想提到的是,将第一次调用
strcat()
改为调用
strcpy()
,也可以解决这个问题。@alk:Yep,在之前的一次编辑中,我有过这样的想法——问题是,OP似乎打算使用while循环进行迭代——如果您将第一个调用更改为
strcpy
,则每次循环时都会重置字符串