我正在尝试在在线C编译器中运行以下程序。但我得到分段错误。你能帮帮我解决这个问题吗?
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="{StaticResource DarkGrayBrush}" />
<Setter Property="BorderThickness" Value="0 0 1 0" />
<Setter Property="FocusVisualStyle" Value="{StaticResource DataGridCellFocusVisualStyle}"/>
<!--<Setter Property="VerticalAlignment" Value="Center"/>-->
<!--<Setter Property="Padding" Value="-20 0 0 0"/>-->
<Setter Property="Margin" Value="5 0 0 0"/>
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True" >
<Setter Property="Background" Value="{StaticResource LightBlueBrush}"/>
<Setter Property="Foreground" Value="{StaticResource BlackBrush}"/>
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="IsTabStop" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
答案 0 :(得分:5)
以下是tolower
int tolower(int c);
您应该传递int
或类似char
的内容,以便安全地转换为int
。像你一样传递char *
(类型string
)会导致UB。
要将字符串转换为小写,您需要单独转换每个字符。一种方法是:
char string[15] = "Strlwr in C";
char lstr[15];
int i = 0;
do {
lstr[i] = tolower(string[i]);
} while(lstr[i] != '\0');
printf("%s", lstr);
答案 1 :(得分:2)
您错误地使用了tolower
。此函数返回int
并获取int
作为参数(这是它的声明:int tolower(int c);
)。您要执行的操作是在char
的每个char array
上调用它,并打印每一个:
char string[15] = "Strlwr in C";
for(int i = 0; i < strlen(string); i++)
printf("%c",tolower(string[i]));
答案 2 :(得分:1)
阅读cplusplus.com/reference/cctype/tolower它需要一个int作为参数,而不是char而不是数组。
您可能希望在&#34; string&#34;上使用循环,它依次处理每个循环。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
int i;
char string[15] = "Strlwr in C";
for (i=0; i< sizeof(string)/sizeof(char); i++)
{
string[i]=(char)(tolower((int)string[i]));
}
printf("%s\n",string);
return 0;
}
输出:
strlwr in c