char* clean_string (char *input_string){
/*Ensure that input string isn't null and only do heavy lifting if it's not null*/
if (input_string){
char *stripped;
stripped = (char*)malloc(strlen(input_string)*sizeof(char));
while (*input_string != '\0'){
if isalpha(*input_string){
*stripped = toupper(*input_string);
input_string++;
stripped++;
} else {
input_string++;
}
}
/* *stripped++ += '\0';*/
return stripped;
}
/*default return val*/
return NULL;
}
有谁能告诉我这里哪里出错?试图进行测试运行,当我尝试调用它时它不会输出任何内容。
答案 0 :(得分:7)
您正在返回指向字符串中最后一个字符的指针(stripped++
?)。
您分配的字节太少(应该是strlen(...) + 1
)。
stripped = (char*)malloc(strlen(input_string)*sizeof(char)); /* Wrong. */
stripped = (char*)malloc(strlen(input_string) + 1);
/* .. */
stripped++;
/* .. */
return stripped;
在开始更改original_stripped = stripped
之前,尝试保留副本,例如stripped
,并返回复制的值(不是递增的值)。
答案 1 :(得分:2)
问题在于调用stripped++
。您正在修改malloc
之前获得的指针。创建一个额外的指针char *result_char = stripped;
并将其用于迭代结果字符串。
答案 2 :(得分:2)
问题是你在返回它之前增加你的剥离变量。 尝试:
char *stripped;
char *result;
stripped = (char*)malloc(strlen(input_string)*sizeof(char));
result = stripped;
...
return result;
答案 3 :(得分:0)
如何:
char* clean_string (char *input_string)
{
/*Ensure that input string isn't null and only do heavy lifting if it's not null*/
if (input_string)
{
char *stripped;
int i;
stripped = (char*)malloc(strlen(input_string)*sizeof(char) + 1);
for(i=0; i < strlen(input_string); i++)
stripped[i] = (isalpha(input_string[i]) ? toupper(input_string[i]) : input_string[i]);
return stripped;
}
/*default return val*/
return NULL;
}