![](/img/trans.png)
[英]Getting a segmentation fault in C with usage of strings, pointers, and functions
[英]Pointers, Strings and functions in C
我錯過了為期一周的課程,其中涵蓋了指針,但是我無法從課堂上獲取注釋,但是我的硬件已到期,我仍然不知道如何使用指針將字符串從一個函數傳遞到另一個函數。 ..下面是我的代碼,在其中我意識到指針已不被弄亂,但我嘗試閱讀其他論壇,但迷路了。 任何幫助表示贊賞。
#include <stdio.h>
char* returnInPlace(char);
int palindrom(char, char );
main(void)
{
char newString[20];
printf("Enter a string: ");
scanf("%s",&newString);
char flippedString[20]=reverseInPlace(newString);
int palCheck= palindrome(newString, flippedString);
if (palCheck==0)
printf("\n\tThe reverse string is %s, so we don't have a palindrome.", flippedString);
else
printf("\n\tThe reverse string is %s, so we do have a palindrome.", flippedString);
}
char* reverseInPlace(char newString)
{
int iterator;
char flipped[20];
char *ptr1;
for(iterator=0;iterator<20;iterator++)
{
flipped[iterator]=firstString[19-iterator];
}
ptr1=flipped[];
return *ptr1;
}
int palindrome(char newString, char flippedString)
{
int iterator;
int palCheck=1;
for(iterator=0;iterator<20;iterator++)
{
if (firstString[iterator]==secondString[iterator])
continue;
else
{
palCheck=0;
break;
}
}
return palCheck;
}
問題1
在char* reverseInPlace(char newString)
,您正在使用
return *ptr1;
這是錯誤的。 您可能想要的是
return ptr1;
問題2
ptr1=flipped[];
是錯的。 在這里,您將分配一個flipped
的局部變量的基地址並返回該值。 flipped
將停止后存在reverseInPlace()
執行完畢。 您需要使用動態內存分配。
問題3
char flippedString[20]=reverseInPlace(newString);
是錯的。 除非在定義時進行初始化,否則不能使用=
分配數組。
問題4
char* reverseInPlace(char newString)
通過查看調用該函數的方式,此函數定義看起來是錯誤的。 也許你想要的是
char* reverseInPlace(char* newString)
代替。
......也許還有更多。 強烈建議在跳入編寫代碼之前,先閱讀一些有關Pointers和C基礎的好書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.