c -操作作为指针传递给函数内部指针的字符串失败



我正在创建一个removeNonAlphaCharacters函数,试图使用c删除所有非字母字符。

我可以删除函数内的所有非字母字符,但我不能将修改后的字符串传递回原始字符串,这意味着即使使用双指针,我也不能直接在函数内覆盖原始字符串。有人知道我的代码出了什么问题吗?

main函数中的最后一个printf不会打印给我HelloData对我来说,removeNonAlphaCharacters函数里面的那个可以给我正确的输出。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int removeNonAlphaCharacters(char ** source);
int main() {
char * source = "Hello 2 Data!";
char **sourcePointer = &source;
int result = 0;
result = removeNonAlphaCharacters(sourcePointer);
printf("we have successfully removed %i characters from the string.n", result);
printf("The modified result is: %s", source);
return 0;
}
int removeNonAlphaCharacters(char ** source) {
char *dest = *source;
size_t sourceLength = strnlen(*source, 100);
char *str = malloc(sourceLength*sizeof(char));
int removeNum = 0;
for (; *dest != ''; dest++) {
if (*dest >= 'A' && *dest <= 'Z' || *dest >= 'a' && *dest <= 'z') {
*str = *dest;
str++;
}
else {
removeNum++;
continue;
}
}
printf("The modified result is: %sn", str-(sourceLength-removeNum));
*source = malloc((sourceLength-removeNum) * sizeof(char));
strncpy(*source, str, 100);
return removeNum;

我试图使用malloc来分配函数内部的内存,它不适合我。我还尝试直接覆盖removeNonAlphaCharacters函数内的原始字符串而不分配内存,这将最终进入内存错误SIGBUS

您的问题在您的职能范围内,removeNonAlphaCharacters

你创建了一个新的字符串str(即指向char的指针),当你操作这个字符串时,你的指针是递增的(在str++行),因此当你调用函数strncpy时,你正在复制的字符串是指向你想要的字符串结束的指针(而不是指向开始的指针)。

修改包含strncpy的行为

strncpy(*source, str-(sourceLength-removeNum), 100);

也不要忘记考虑将空终止符''添加到您的新字符串中。