【发布时间】:2020-02-22 22:48:08
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int toggleChars (char* string, char* letters){
int count = 0;
char* scurrent = string;
while(*scurrent != '\0'){
char* lcurrent = letters;
while(*lcurrent != '\0'){
if(*scurrent == *lcurrent){
*scurrent = '0';
count += 1;
}
lcurrent += 1;
}
scurrent += 1;
}
return count;
}
int main(){
char* str = malloc(50);
char* letters = malloc(20);
str = "Hi how R U today?";
letters = "HhiR";
int x = toggleChars(str, letters);
printf("str: %s\ncount: %d", str, x);
return 0;
}
这只是我为即将到来的 C 编程考试而制作的一个测试函数。当我编译并运行它时,它给了我一个段错误。我通过一些测试推断它是由线路引起的
*scurrent = '0';
所以这意味着我不应该改变那个内存位置的字符。但是如果我真的想改变它,我该怎么办?
【问题讨论】:
-
你不能这样分配字符串。在
str = "Hi how R U today?";中,您将从malloc获得的内存中的指针str更改为只读内存中的常量字符串"Hi how R U today?"。尝试更改字符串会导致内存冲突。请改用strcpy(str, "Hi how R U today?"); -
@Frankie_C 谢谢!有效。我有另一个问题。如果我刚刚声明 char* str = "Hi how R U today" 和没有字母的相同内容,它也不行吗?我是否必须调用 malloc 并将字符串复制到内存中?有没有更好的方法?
-
您可以创建一个本地 char 数组并使用您需要的字符串 对其进行初始化:
char str[50] = "Hi how R U today?";。编译器 CRT 将提供用于复制字符串。
标签: c pointers memory segmentation-fault