好的,所以我写了一个小功能,将字符串中的任何大写字母转换为小写,只是为了练习我正在学习C语言的书。
除了通过指针将值赋值为'char'之外,一切正常 这是代码和一切正确编译但我得到此运行时错误“Unkown pseudo relocation protocol version%d。”这就是为什么我尝试打印通过指针改变了值的char。
#include <stdlib.h>
#include <stdio.h>
/*
----------------------------------------------
CONVERTS UPPERCASE CHARACTERS TO LOWERCASE
----------------------------------------------
*/
void lowercase(char * address, char text2){
// used in the for loop
int inc;
// used as an index for text2Copy
int inctwo = 0;
// used in the for loop
int length = strlen(text2);
//used to copy the active character in text2
char text2Copy[length];
for(inc = 0; inc <= length; inc++){
//basicaly if character is a capital leter
if(text2[inc] >= 'A' && text2[inc] <= 'Z'){
//I plus 32 because each letter is 32 numbers away in 'ASCII'
//therefore converting capital to lowercase
text2Copy[inctwo] = text2[inc] + 32;
//add one to help with indexing
inctwo++;
}
//if the character is not a capital leter
else{
text2Copy[inctwo] = text2[inc];
inctwo++;
}
}
//*address = "sdafsdf"; //<-- THIS WORKS!!!
*address = text2Copy;//WHY DOESN"T THIS WORK?
}
int main(){
//just the string I will be using.
char * text = "'CONVERT capitals TO lower CASE'";
//print the string to show the original
printf("%s\n",text);
lowercase(&text,text);
//This is where I want the value from the function to print out
printf("%s\n",text);
return 0;
}
如果你能帮助我,我会非常感激,我真的很困惑,有点恼火,为什么这不起作用。如果你需要我更好地解释它,请求它,我希望我已经做得足够了。
谢谢,杰克。
/////////////////////////////////////////////// ///////编辑////////////////////////////////////////// ////////////////
好的,我已经使用了你的所有建议,谢谢你们:D
现在它除了一个我不知道如何解决的奇怪的bug之外还有效
除了第一个字符之外的所有内容都变成了小写字符
现在发生了什么 - &gt; “+反转大写小写”我不知道为什么第一个角色会这样做? anythoughts?
这是新代码。
#include <stdlib.h>
#include <stdio.h>
/*
----------------------------------------------
CONVERTS UPPERCASE CHARACTERS TO LOWERCASE
----------------------------------------------
*/
void lowercase(char * address, char text2[]){
// used in the for loop
int inc;
// used in the for loop
int length = strlen(text2);
for(inc = 0; inc <= length; inc++){
//basicaly if character is a capital leter
if(text2[inc] >= 'A' && text2[inc] <= 'Z'){
//I plus 32 because each letter is 32 numbers away in 'ASCII'
//therefore converting capital to lowercase
text2[inc] += 32;
//add one to help with indexing
inctwo++;
}
//if the character is not a capital leter
else{
inctwo++;
}
}
*address = text2;
}
int main(){
//just the string I will be using.
char text[] = "cONVERT capitals TO lower CASE";
//print the string to show the original
printf("%s\n",text);
lowercase(&text,text);
//This is where I want the value from the function to print out
printf("%s\n",text);
return 0;
}
答案 0 :(得分:2)
你有几个问题。首先,当你将错误的类型传递给你的函数时,你的程序甚至不应该编译。第二个是你尝试修改文字(因此是常量)字符串。
对于第二部分,您可以通过使用数组来轻松解决它:
char text[] = "CONVERT capitals TO lower CASE";
您还尝试“返回”指向局部变量的指针,这将导致未定义的行为,因为局部变量是本地变量。一旦函数返回它们占用的内存将被其他函数重用。
对于实际的转换功能,它可以比你的尝试更简单更多:
void lowercase(char *text)
{
while (*text != '\0')
*text = tolower(*text);
}