Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两个月前关闭。
我是C新手,我想写一个简单的程序,它接受用户的输入并打印出特定的次数。
它工作正常,直到按下输入次数后,当程序崩溃时,鱼壳显示“Fish:”/a.out“终止于信号SIGSEGV(地址边界错误)”。
地址边界错误告诉我,也许我还没有为某个东西分配内存,但是我该怎么做呢?我试过使用malloc,指针指向
不需要与
变量
将“anything”改为“any word”,因为
限制输入量以防止溢出。
报告是否有问题读取字符串并退出。
固定
检查成功阅读
定义
如果用户请求一个副本,则只打印一个副本(将
在每个单词后输出换行符。还有其他方法来表示数据,包括最初选择的数据,但至少应该用换行符结束输出。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两个月前关闭。
我是C新手,我想写一个简单的程序,它接受用户的输入并打印出特定的次数。
#include <stdio.h>
#include <stdlib.h>
int main() {
char* str[100];
int *p = malloc(sizeof(int) * 10);
int amount;
*p = amount;
int i;
printf("\nType anything!\n");
scanf("%s", str);
printf("\nHow many times?\n");
scanf("%d", amount);
for (i=0; i<=amount; i++) {
printf("%s", str);
}
return 0;
}
它工作正常,直到按下输入次数后,当程序崩溃时,鱼壳显示“Fish:”/a.out“终止于信号SIGSEGV(地址边界错误)”。
地址边界错误告诉我,也许我还没有为某个东西分配内存,但是我该怎么做呢?我试过使用malloc,指针指向
amount
,但似乎没有解决任何问题。 最佳答案
值得注意的是,在这么短的代码块中有多少问题:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[100];
int amount;
printf("\nType any word!\n");
if (scanf("%99s", str) != 1)
{
fprintf(stderr, "Failed to read a string\n");
return(EXIT_FAILURE);
}
printf("\nHow many times?\n");
if (scanf("%d", &amount) != 1)
{
fprintf(stderr, "Failed to read an integer\n");
return(EXIT_FAILURE);
}
for (int i = 0; i < amount; i++)
{
printf("%s\n", str);
}
return 0;
}
main()
的签名是一个完整的原型。str
的类型被更正(或者,至少,被更改并可用)。不需要与
p
和malloc()
相关的代码。变量
i
被移动到for
循环中(假设有一个C99或更高版本的编译器;如果不可用,那么您所拥有的就可以了)。将“anything”改为“any word”,因为
%s
跳过空白,然后将非空格读到下一个空白。限制输入量以防止溢出。
报告是否有问题读取字符串并退出。
固定
scanf()
以通过&amount
(键更改)。检查成功阅读
amount
并报告失败并退出。定义
i
在回路控制(C99)。如果用户请求一个副本,则只打印一个副本(将
<=
更改为<
-这是一个惯用的C循环)。在每个单词后输出换行符。还有其他方法来表示数据,包括最初选择的数据,但至少应该用换行符结束输出。
关于c - 如何解决C语言中的地址边界错误? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57796816/
10-11 18:24