好的,我很困惑,迫切需要帮助。我正在处理一个动态分配字符串数组的任务,并且我一直在使用 realloc 时遇到问题。我终于让它看起来可以工作了,我只需要编写 for 循环来正确显示结果。
除此之外,代码将停止工作。它会让我输入字符串,与我之前用来测试它的字符串完全相同,程序会崩溃,说 realloc 遇到了无效指针的问题。每当我再次评论 for 循环时,一切似乎都运行良好。
这可能是愚蠢的事情,或者是我对 realloc 不了解的事情的结果,但是我的时间不多了,各种搜索都没有返回任何我认为适用的答案,所以我想我会在这里问。
我用来测试它的输入是“你好,我的一个真正的朋友”。
这是我的代码(是的,我知道,这是一团糟,抱歉。通常我对这些事情要好一些,但我一直很着急):
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int MAXSTRING = 255;
int makearg(char s[], char **args[]);
int main()
{
char **tokenArray;
char strInput[MAXSTRING];
int tokenResult;
int i = 0;
printf("Input String to be Parsed: ");
scanf("%[^\n]%*c", strInput);
tokenResult = makearg(strInput, &tokenArray);
printf("argc: %d\n", tokenResult);
for (i < tokenResult; i++;)
{
printf("arg(%d): %s\n", i, tokenArray[i][1]);
}
}
int makearg(char s[], char **args[])
{
int numTokens = 0;
int lastSpace = 0;
int i = 0;
char token[MAXSTRING];
int subFromPos = 0;
while ((s[i] != '\n') && (s[i] != '\0'))
{
token[i - lastSpace - subFromPos] = s[i];
if (s[i] == ' ')
{
token[i - lastSpace] = '\0';
*args = realloc(*args, (numTokens + 1));
//printf("the seg fault hasnt happened yet 1\n");
args[numTokens] = NULL;
args[numTokens] = realloc(args[numTokens], (i - lastSpace + 1));
//printf("the seg fault hasnt happened yet 2\n");
*args[numTokens] = token;
printf("Saved Token: %s\n", *args[numTokens]); //test to see if the token got written properly
numTokens++;
lastSpace = i;
subFromPos = 1;
}
//printf("%c\n", s[i]);
//printf("Token: %s\n", token);
//printf("the seg fault hasnt happened yet\n");
i++;
}
numTokens++;
return numTokens;
}