我正在尝试将已传递给此函数的字符串从小写转换为大写。我一直遇到段错误,无法确定原因。
void uppercase(char* input)
{
int str_size = strlen(input);
char *string = input;
for (int i = 0; i < str_size; i++)
{
string[i] += -32;
printf("%c", string[i]);
}
return;
}
调用函数大写的函数:
#include <stdio.h>
#include <string.h>
int main(void)
{
uppercase("max");
return(0);
}
答案 0 :(得分:1)
您传递的字符串是可能存在于只读内存中的文字(因为它是一个常量的字符串文字),您不能修改它。因此错误。
将字符串存储在字符数组中,然后将其传递给函数。
char str[]="max";
uppercase(max);
http://www.geeksforgeeks.org/storage-for-strings-in-c/
https://softwareengineering.stackexchange.com/questions/294748/why-are-c-string-literals-read-only
答案 1 :(得分:0)
正如@dasblinkenlight所说,你是cannot modify a string literal。
请改为尝试:
int main(void)
{
char str[4] = "max";
uppercase(str);
return(0);
}
或者你也可以malloc一个字符串并传入它。
答案 2 :(得分:0)
您不能将字符串文字作为参数传递给函数。尝试先将它存储在数组中,然后将其传递给函数。
#include <stdio.h>
#include <string.h>
void uppercase(char* input)
{
int str_size = strlen(input);
char *string = input;
for (int i = 0; i < str_size; i++)
{
string[i] += -32;
printf("%c", string[i]);
}
return;
}
int main(void)
{
char str[]="max";
uppercase(str);
return(0);
}