- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
/*
* GETINTDRIVER -- program to call an integer reading function
*
* Compiling: put the getint function in getint.c, then say:
* gcc -ansi -pedantic -Wall -o getint getintdriver.c getint.c
*
* Usage: getint
*
* Inputs (from standard input)
* -- a line of text
* -- EOF to exit
* -- special handling of 2246, 2247, 2248, 2249
* Outputs (to standard output)
* -- a prompt when it expects input
* -- outputs indicating the success or failure of the getint call
* -- if input is integer 2246, also indicate whether getint() handles
* a NULL first argument correctly
* -- if input is integer 2247, also indicate whether getint() handles
* a NULL second argument correctly
* -- if input is integer 2248, also indicate whether getint() handles
* a NULL third argument correctly
* -- if input is integer 2249, also indicate whether getint() handles
* a NULL dereferencing of the third argument correctly
* Errors (to standard error)
* -- nothing printed
*
* Exit Code: 0
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
/*
* macros
*
* how to test for bogus arguments
*/
#define BADARG1 2246 /* if read, test handling of NULL first arg */
#define BADARG2 2247 /* if read, test handling of NULL second arg */
#define BADARG3 2248 /* if read, test handling of NULL third arg */
#define BADARG4 2249 /* if read, test handling of NULL dereference for third arg */
/*
* prototypes
*/
int getint(char *inputline, int *value, char **nextchar)
/* function to read an integer */
{
int c;
int sign;
while(isspace(c = getchar()))
;
if(!isdigit(c) && c != EOF && c != '+' && c != '-') {
**nextchar = ungetchar(c);
return 0;
}
sign = (c == '-') ? -1 : 1;
if(c == '+' || c == '-')
c = getchar();
for(*value = 0; isdigit(c); (c = getchar()))
*value = 10 * *value + (c - '0');
*value *= sign;
if(c != EOF)
ungetchar(c);
return c;
}
ungetchar(int n)
{
while(getchar() != '\n');
{
return 1;
}
}
/* {
int n;
int i;
char inpline[INT_MAX];
while(fgets(inpline, sizeof[inpline], *inputline))
{
n = antoi(inpline);
if(atoi(inpline) == 1);
{
*value = atoi(inpline);
}
else if (!atoi(inpline) && (getchar() != '\n' || inpline == '.'))
{
return 0;
}
else
{
**nextchar = inpline[n];
}
if(inpline[n] >= inpline[INT_MAX])
{
return 0;
}
else if (inpline[n] <= inpline[INT_MIN])
{
return 0;
}
return 0;
}
*/
/*
* this function calls getint with various illegal parameters
*
* Parameter: int number to trigger test (or not)
* numbers that do not trigger tests are ignored
* BADARG1 test NULL argument 1
* BADARG2 test NULL argument 2
* BADARG3 test NULL argument 3
* BADARG4 test argument 3 pointing to NULL
* Returns: nothing
* Exceptions: none
* Side Effects: prints a 1-line message identifying the test run and
* giving the success or failure of the test */
void checkargs(int testno)
{
char line[10]; /* array used for input line */
int inpnum = 0; /* space for the read number */
char *nextch = line; /* where the getint function leaves off */
int rv; /* return value from getint() */
/*
* just copy some characters into line
*/
(void) strcpy(line, "987654321");
/*
* process any magic numbers (see above)
*/
switch(testno){
case BADARG1: /* NULL first argument */
if ((rv = getint(NULL, &inpnum, &nextch)) == -1)
printf("Passed NULL first argument test\n");
else
printf("Failed NULL first argument test; returned %d\n", rv);
break;
case BADARG2: /* NULL second argument */
if ((rv = getint(line, NULL, &nextch)) == -1)
printf("Passed NULL second argument test\n");
else
printf("Failed NULL second argument test; returned %d\n", rv);
break;
case BADARG3: /* NULL third argument */
if ((rv = getint(line, &inpnum, NULL)) == -1)
printf("Passed NULL third argument test\n");
else
printf("Failed NULL third argument test; returned %d\n", rv);
break;
case BADARG4: /* NULL dereference of third argument */
nextch = NULL;
if ((rv = getint(line, &inpnum, &nextch)) == -1)
printf("Passed NULL third argument dereference test\n");
else
printf("Failed NULL third argument dereference test; returned %d\n", rv);
break;
default: /* ignore any other number */
break;
}
}
/*
* it all starts at the main routine
*/
int main(void)
{
char buf[1024]; /* input buffer */
int numread; /* number read from input */
char *nextch; /* where we left off */
int rv; /* return value of getint() */
/*
* loop until end of file
* prompting the user for an input line
*/
while(printf("> "), fgets(buf, 1024, stdin) != NULL){
/* clobber any trailing newline */
if (buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = '\0';
/*
* now process the line -- read the leading integer
* and report if it is not an integer or if
* it is too big or too small to represent
*/
switch(rv = getint(buf, &numread, &nextch)){
case -1: /* illegal parameter */
printf("Illegal call -- internal inconsistency\n");
break;
case 0: /* no leading integer */
printf("No number -- string is \"%s\"\n", nextch);
if (buf != nextch)
printf("Note -- third argument should point to first, but it doesn't\n");
break;
case 1: /* read number, all's well */
printf("Read integer %d; rest of string is \"%s\"\n", numread, nextch);
break;
case 2: /* read number but it's too big */
printf("Integer overflow (+ve) -- string is \"%s\"\n", nextch);
break;
case 3: /* read number but it's too negative */
printf("Integer underflow (-ve) -- string is \"%s\"\n", nextch);
break;
default: /* huh? should never happen */
printf("Unknown return value %d\n", rv);
break;
}
/*
* now check for illegal arguments
*/
if (rv == 1)
checkargs(numread);
}
/*
* sweet dreams ...
*/
return(0);
}
我不断收到段错误错误,但我想做的就是获取整数并摆脱非字母数字。对于此程序,+123 和 -123 是整数,而 123xyz 不是。 123.4 不是整数,而是 1234。但我不断收到段错误。
更新:现在我运行它,我不断收到“未知返回值#”。过去,如果我输入带有 123xys 等字母的数字或仅输入字母,就会出现段错误错误。
最佳答案
什么时候为 nextch 分配内存?
char *nextch; /* where we left off */
int rv;
从 main 调用方法 switch(rv = getint(buf, &numread, &nextch)){
请考虑以下程序以供您理解。
#include<stdio.h>
#include<string.h>
void f(char **c){
**c = 'h';
return;
}
int main(){
char *n;
n = malloc( sizeof (char));
f(&n);
return 0;
}
如果您注释行 n = malloc( sizeof (char));
您将遇到段错误。
更改您的代码,例如:
char buf[1024]; /* input buffer */
int numread; /* number read from input */
char *nextch; /* where we left off */
int rv; /* return value of getint() */
nextch = malloc ( sizeof( char) * 1024);
请告诉我我是否正确理解了您的问题。
关于c - getint 函数出现段错误错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604264/
您好,我正在尝试将 Activity 更改为 fragment ,以便将其添加到滑动布局中,我想我快完成了(除非任何人都可以在我的代码中看到任何其他错误)但我找不到在任何地方解决我的问题,它说'get
我有点困惑为什么在 RoutineRetrieved 函数中分配 ACTIVITYIMAGE 时使用 result.getInt(2) 并在分配 SLOT 时使用 result.getInt(3)..
我想从第二个 Activity 中获取一个值,以便在单独的类(fragmentPageAdapter)中使用它。首先,使用 Intent.putExtra(key_name, string) 将这个值
我有一个如下定义的 oracle 表: create table image_table_test (id number primary key, image ordsys.ordimage); 当我
/* * GETINTDRIVER -- program to call an integer reading function * * Compiling: put the getint fu
学习如何制作 Android 应用程序,我完成了这个教程。图的摘要在这里: http://sketchytech.blogspot.com/2012/10/android-simple-user-in
我是 android 应用程序的新手。我正在开发一个聊天应用程序。我使用了 RecyclerView 和内部 recyclerview 适配器,我在 Activity 开始时传递一个数据 下面是我的代
我正在通过这样的 Intent 从另一个 Activity 中获取 byteArray: if (view == null) { view = new ImageVie
我正在尝试将字符串从主要 Activity 传递到从服务扩展的另一个类。我从 main 的 onCreate 方法发送它: Intent phoneintent = new Intent(MainAc
我的程序由一个 MainActivity 和两个 fragment Activity 组成。我需要一个 fragment 从用户那里获取一个字符串值并将其传递给第二个 fragment 。 我正在努力
我不明白为什么我们使用方法 getIntent()。 因为,当我们需要那个方法时,我们可以使用方法onActivityResult()。 但是通过使用方法getIntent(),它可能会导致NullP
以下方法在 Activity 打开时返回空指针异常。有人知道为什么吗?调用 getIntent() 时是否与不存在 Intent 有关? 如有任何帮助,我们将不胜感激。 日志: 04-21 15:38
在 getView() 方法中,我想调用 getIntent()。在不开始新 Activity 的情况下如何实现这一目标。像这样的getView方法 public View getView(final
带你来看看mybatis为什么报"Invalid value for getInt()"这个错误。 背景 使用mybatis遇到一个非常奇葩的问题,错误如下: Cause: org.apache.ib
Firebase 提供以下方法: getBoolean() getByteArray() getDouble() getLong() getString() https://firebase.goog
此代码启动 Activity : Intent intent = new Intent(context, GameActivity.class); intent.putExtra("load"
我有一个问题,此代码仅返回默认值 -1。我尝试调试,它有值(value),所以我不知道为什么它总是返回-1。 private static final String KEY_CATEGORY_ID =
我在 app_restrictions.xml 中有这个: 现在,如果我想阅读它,我会得到 > java.lang.ClassCastException: java.lang.String cann
我有这个方法: public String givenCheckmark(String name, String date) { SQLiteDatabase db = Cache.open
在这里,resultSet.getInt() 不起作用,但我不知道我的代码出了什么问题。 我想增加列的值(名称为变量“出勤”)。使用 SELECT 语句我想读取当前值,通过使用 UPDATE 我想将相
我是一名优秀的程序员,十分优秀!