我想在聯機C編譯器中的程序下運行。但我得到分割錯誤。你能幫我解決這個C程序的分段錯誤(核心轉儲)錯誤
#include <stdio.h>
#include <string.h>
int main()
{
char string[15] = "Strlwr in C";
printf("%s",tolower(string));
return 0;
}
我想在聯機C編譯器中的程序下運行。但我得到分割錯誤。你能幫我解決這個C程序的分段錯誤(核心轉儲)錯誤
#include <stdio.h>
#include <string.h>
int main()
{
char string[15] = "Strlwr in C";
printf("%s",tolower(string));
return 0;
}
您錯誤地使用了tolower
。該函數返回int
並獲取int
作爲參數(這裏是聲明:int tolower(int c);
)。你想要做的是把它在你的char array
的每個char
,並打印出每個之一:
char string[15] = "Strlwr in C";
for(int i = 0; i < strlen(string); i++)
printf("%c",tolower(string[i]));
以下是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);
讀cplusplus.com/reference/cctype/tolower它採用單個int爲參數,不焦不陣列。
你可能想要在「string」上使用一個循環,它依次處理每個循環。
#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
非常感謝所有人的迴應。現在明白了這個問題:-) – Karthik
讀http://www.cplusplus.com/reference/cctype/tolower/它需要一個單個int作爲參數,不炭和未數組。你可能想要在「字符串」上使用一個循環,它依次處理每個循環。 – Yunnosch
'tolower()'返回一個'int',並接受一個'char',而不是一個'char'數組。 – CinCout
編譯啓用所有警告並將警告視爲錯誤。 –