你的循环在你的数组末尾徘徊。这就是导致段错误的原因。在 C 中,无法保证未初始化的变量为 NULL,或者其他任何与此相关的变量。因此,您的循环会一直循环,直到它尝试访问不存在的 argvalues[11]。因此分段错误。
while (argvalues[i] != NULL) {
if (argvalues[i] == NULL){
这两者相互矛盾。它甚至永远不会到达 if 语句,因为当 while 循环发现 argvalues[i] == NULL 时,它会首先退出。如果设置了所有 10 个参数,那么您将尝试访问 argvalues[11] ,这将如前所述发生段错误。
要正确使用 strcat,您必须有一个足够大的字符串缓冲区来接受您要连接到它末尾的字符串。例如,如果您想将“world”添加到已经包含“hello”的缓冲区,则必须声明 hello 缓冲区至少与“hello”+“world”加上 1 个字符('\0'在末尾)。
// Here's an example.
char buffer[12];
strcpy(buffer, "hello");
strcat(buffer, " world");
如果您尝试这样做,它将失败:
// Buffer isn't big enough to copy into.
char buffer[] = "hello";
strcat(buffer, " world");
为了弄清楚你在做什么,我们需要更多的描述和代码。将空终止符添加到参数的最佳位置是首次设置参数时。根据您设置参数的方式,它可能已经发生在您身上。