C-切分错误中的小写字母到大写字母问题
当我想运行可执行文件时,出现了分段错误C-切分错误中的小写字母到大写字母问题,c,segmentation-fault,uppercase,lowercase,C,Segmentation Fault,Uppercase,Lowercase,当我想运行可执行文件时,出现了分段错误 void lowerupper(char *s){ int i ; int a = strlen (s); printf("%d\n", a); //fails here segmentation fault for (i=0 ; i < a-1 ; i++){ if( (s[i] >= 97) && (s[i] <= 122)){
void lowerupper(char *s){
int i ;
int a = strlen (s);
printf("%d\n", a);
//fails here segmentation fault
for (i=0 ; i < a-1 ; i++){
if( (s[i] >= 97) && (s[i] <= 122)){
s[i] = s[i] - 32;
}
}
}
int main(void) {
char* string1 = 'HeLlo wOrlD';
printf("%s\n", string1);
lowerupper(string1);
printf("%s\n", string1);
return 0;
}
void lowerupper(字符*s){
int i;
int a=斯特伦(s);
printf(“%d\n”,a);
//在分割错误中失败
对于(i=0;i 如果((s[i]>=97)&&(s[i]您可能正在将局部变量的地址传递给函数。
您应该在堆中分配内存,然后将该变量传递给函数。
此代码在此处工作:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
void lowerupper(char *s)
{
int i ;
int a = strlen (s);
printf("%d\n", a);
for (i=0 ; i < a-1 ; i++)
{
if( (s[i] >= 97) && (s[i] <= 122))
{
s[i] = s[i] - 32;
}
}
}
int main(void)
{
char *ss=malloc(10);
strcpy(ss,"hello\n");
lowerupper(ss);
printf("%s",ss);
return 0;
}
#包括
#包括
#包括
void lowerupper(字符*s)
{
int i;
int a=斯特伦(s);
printf(“%d\n”,a);
对于(i=0;i 如果((s[i]>=97)&&(s[i]您不能修改string1
。事实上,当您声明这样的字符串时
char* string1 = "HeLlo wOrlD";
字符串可以存储在只读内存区域中,这意味着您可以读取它,但不能修改它。
如果你这样做
char array[] = "hello world";
然后它创建一个只读字符串,并将字符复制到数组
,您将能够修改它(到数组
)。
我们邀请您使用关键字const
声明只读字符串
const char *string1 = "HeLlo wOrlD";
是的。我能做些什么来纠正它呢?:也许,但循环for(i=0;i
是错误的,因为它忽略了字符串中的最后一个字符。strlen
不包括nul
终止符。它应该是i
指针不是字符串,也不是数组本身。C没有字符串类型。@Olaf是的,我有点笨拙,要找到合适的词来谈论这个问题并不总是容易的:(没有必要。@Olaf是的,但可能是possible@PeterJ_01谢谢,先生,我从来没有说过我的答案是对的,但是通过这次我从你们身上学到了一些新的东西,下次我会做得更好。如果你给出答案,你必须百分之百肯定,这不是分数或声誉竞赛。@PeterJ_01是的,我同意你们的观点,但第一件事是尝试d我正在努力,从今天学到的下次开始,我会百分之百确定。