#include <stdio.h>
main()
{
char* str;
char* strrev;
int i = 0;
int j = 0;
int c;
printf("Enter the string\n");
scanf("%[^\n]%*c", str);
while (*(str + i) != '\n')
{
i++;
}
for (c = i; c >= 0; c--)
{
*(strrev + j) = *(str + c);
j++;
}
}
这是我的反转字符串的代码。当我编译代码时,它会给出错误segmentation fault
。有人帮助我理解错误并实现我的错误。
感谢
答案 0 :(得分:5)
有很多问题:
str
或strrev
分配内存。这就是崩溃的原因;写入未初始化的指针会调用未定义的行为,通常会导致seg错误。scanf()
时,您正在使用fgets()
进行复杂的转换。strlen()
而不是循环来查找字符串的结尾。答案 1 :(得分:0)
char *str,*strrev;
首先你的char缓冲区从未初始化。
http://www.cplusplus.com/reference/cstring/strlen/ 第二次使用strlen来确定字符串len
问候
答案 2 :(得分:0)
跟随(某些)@unwinds指针,这里有一些代码将反转字符串:
(您可以使用scanf()
,但不需要这么复杂的格式字符串)
#include<stdio.h>
main()
{
char str[260],strrev[260];
int i=0, len;
printf("Enter the string\n");
scanf("%s",str);
len = strlen(str);
for(i=1;i<len;i++)
{
strrev[i-1] = str[len-i];
}
strrev[len]=0;
;
}
如果您想避免使用scanf,请将其替换为:
char str[260], strrev[260];
//...
fgets(buf, sizeof(str), stdin);
[编辑每条评论] 如果仍想使用char *
,请执行以下操作:
#include<stdio.h>
main()
{
char *str, *strrev;
int i=0, len;
printf("Enter the string\n");
str = malloc(260);
strrev = malloc(260);
scanf("%s",str);
len = strlen(str);
for(i=1;i<len;i++)
{
strrev[i-1] = str[len-i];
}
strrev[len]=0;
free(str);
free(strrev);
}
注意:除了按键计数之外,我不确定如何在运行时确定用户输入的字符数。所以在这个例子中,假定为260个字节。
答案 3 :(得分:0)
除了@unwind之外,即使您使用str[100]
,查找长度的循环也会失败。由于str
没有\n
,while()
循环永远不会结束。
// bad
char str[100];
scanf("%[^\n]%*c", str);
while (*(str + i) != '\n') {
i++;
}
// better
char str[100];
scanf("%99[^\n]%*c", str);
while (*(str + i) != '\0') { // look for \0
i++;
}
答案 4 :(得分:0)
C1 = open("Class 1.txt", "a")
pos = C1.find(S_N)
C1.seek(pos)
C1.write(correct)
简单代码