我正在刷新我的C/C++技能。我試圖實現一個反轉字符串的函數,但每次運行程序時都會收到一個分段錯誤(核心轉儲)。反向字符串函數給我一個分段錯誤
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
int start = 0;
int len = strlen(str);
int mid = len/2;
int i, t;
printf("start: %d, mid: %d,len: %d\n", start, mid, len);
for (i = start; i < mid; ++i)
{
printf("str[%d] swapping to str[%d]: %c, %c\n", i, len - 1 -i, str[i], str[len - 1 - i]);
t = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = t;
}
}
該解決方案還使我有同樣賽格故障:
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
char *end = str;
char t;
if (str)
{
while (*end != 0)
end++;
end--;
while (str < end)
{
t = *str;
*str++ = *end;
*end-- = t;
}
}
}
您不能修改文字。現在我已經給出了有用的建議,當你在實際代碼中反轉字符串時,請注意'std :: reverse'。 – chris
你需要展示你的工作。例如,分段故障發生在哪條線上? –
謝謝,@chris,我知道'std :: reverse',但我試圖用C風格做到這一點。 – Osuvaldo