错误将字符串中的字符转换为大写
error convert character in string to uppercase
我正在尝试将字符串的字符转换为大写字母
int main (void)
{
int i = 0;
int n = 0;
static char *str[] = { "wow",
"RACEcar",
"No devil lived on.",
"rotor" };
for(i = 0; i < strlen(*str); i++)
{
if(str[i] != NULL)
{
n = function(str[i]);
}
}
return 0;
}
int function(char* x)
{
int i = 0;
int j = strlen(x);
char c;
for(i = 0; i < j; i++)
{
c = toupper(x[i]);
x[i] = c;
}
return 0;
}
我在 x[i] = c;
所在的行收到一条错误消息 exc bad access, code 2
我不确定为什么会出现此错误,是否需要创建另一个字符串并将 c 分配给新字符串?
toupper return 字符的大写版本,但实际上并没有改变元素本身,所以我不确定将值 return 赋值给元素有什么问题。
您的代码试图修改字符串文字,这会导致未定义的行为。
字符串 "No devil lived on."
不可修改。为了帮助编译器捕获错误,您应该将数组声明为:
static char const *str[] = { "wow", // etc.
由于历史原因,如果您忘记包含 const
,编译器必须让它通过而不破坏编译。但它仍然是一个错误,一些编译器无论如何都会发出警告。
对于 gcc,您可以使用标志 -Wwrite-strings
来禁用对历史案例的支持;这将导致按原样为您的代码生成一条错误消息。
我正在尝试将字符串的字符转换为大写字母
int main (void)
{
int i = 0;
int n = 0;
static char *str[] = { "wow",
"RACEcar",
"No devil lived on.",
"rotor" };
for(i = 0; i < strlen(*str); i++)
{
if(str[i] != NULL)
{
n = function(str[i]);
}
}
return 0;
}
int function(char* x)
{
int i = 0;
int j = strlen(x);
char c;
for(i = 0; i < j; i++)
{
c = toupper(x[i]);
x[i] = c;
}
return 0;
}
我在 x[i] = c;
所在的行收到一条错误消息 exc bad access, code 2
我不确定为什么会出现此错误,是否需要创建另一个字符串并将 c 分配给新字符串?
toupper return 字符的大写版本,但实际上并没有改变元素本身,所以我不确定将值 return 赋值给元素有什么问题。
您的代码试图修改字符串文字,这会导致未定义的行为。
字符串 "No devil lived on."
不可修改。为了帮助编译器捕获错误,您应该将数组声明为:
static char const *str[] = { "wow", // etc.
由于历史原因,如果您忘记包含 const
,编译器必须让它通过而不破坏编译。但它仍然是一个错误,一些编译器无论如何都会发出警告。
对于 gcc,您可以使用标志 -Wwrite-strings
来禁用对历史案例的支持;这将导致按原样为您的代码生成一条错误消息。