C程序的分段错误(核心转储)错误

时间:2017-06-28 05:51:14

标签: c

我正在尝试在在线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>

3 个答案:

答案 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