- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 GDB 在 Windows 中调试我的程序并且需要标准输入。
所以,我编译了它:
gcc -g abstieg2.c
gdb a
break 1
run < graph1.in
但标准输入只有\n !
do{
getline(&line,&size,stdin);
} while(!strcmp("\n",line)); // for testing, gets stuck forever, but only with gdb
我真的看不出还有什么可以与这个问题相关。
谢谢
我的代码的精简版:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
void *errorchecked_malloc(unsigned int);
unsigned int correctinput(char**);
void free_us();
void my_qsort(int , int r);
unsigned int *Dijkstra(int , int , unsigned int , int );
unsigned int min_distance(unsigned int* , int );
int linearsearch(int);
char* strerror(int);
unsigned int *start_edge=NULL; // Input of edges is organised into three array
unsigned int *end_edge=NULL;
unsigned int *length_edge=NULL;
unsigned int *base_camp=NULL ; // Input of basecamps
unsigned int *Dijkstra_dist=NULL; // distance value of dijkstra algorithm
unsigned int *Dijkstra_vis=NULL; // visited by dijkstra algorithm?
unsigned int *Dijkstra_predec=NULL ; // predecessor of dijkstra algorithm
unsigned int* found=NULL;
int * pos_in_vertices;
char* store_for_reset= NULL; // line (input) char* wil be changed, in store_for_reset line will be saved
int basecamp_length=0;
/*Aim: Find the shortest way in a graph from start_vertices to finish_vertices
* restrictions:
* -2 Day travel with max_distance per day
* -after one day a basecamp must be reached( or the finish vertices)
* -N vertices <=N
*
* Input is organized as following:
* start_vertices finish_vertices d_max\n //
* start_vertices end_vertices max_distance\n // for each edge
* ...
* base_camp\n
* base_camp\n
* ...
*/
int main( ) {
int N=0; // count of vertices
int arg_line_count=0; //
unsigned int start; // First three Input of start basecamp
unsigned int end; // finish basecamp
unsigned int d_max; // maximum travel distance per day
char* line = (char *)errorchecked_malloc(36*sizeof(char));
store_for_reset= line;
int size =strlen(line);
//Input configuration
do{
getline(&line,&size,stdin);
printf("%s",line);
} while(!strcmp("\n",line));// for testing, gets stuck forever, but only with gdb
start_edge = (int*)errorchecked_malloc(sizeof(int)*1000); // creating space, TODO dynamic space allocation
end_edge = (int*)errorchecked_malloc(sizeof(int)*1000);
length_edge = (int*)errorchecked_malloc(sizeof(int)*1000);
start = correctinput(&line); // first line input
end = correctinput(&line);
d_max = correctinput(&line);
// input of all edges
for(int i=0;fgets(line,size,stdin);i++){ // fgets returns NULL if stdin empty
printf("Zeile %d \n", i);
start_edge[i]=correctinput(&line);
printf("line: %s", line);
if(line[0]=='\0'){ // end of line, means now are only basecamps left
base_camp[0]=start_edge[i];
start_edge[i]=0;
basecamp_length=1;
break;
}
if(start_edge[i]>N) N= start_edge[i];
end_edge[i]=correctinput(&line);
length_edge[i]=correctinput(&line);
line =store_for_reset;
}
// Input of basecamps
base_camp= (int*)errorchecked_malloc(sizeof(int)*N); // generous, N is maximum of Nodes
for(int i=1;fgets(line,size,stdin);i++){
base_camp[i]=correctinput(&line);
if(line!=NULL){
printf("fatal error:Too many arguments per line while reading \"Basislagern\" input");
free_us();
exit(-1);
}
basecamp_length++;
}
free_us();
}
unsigned int correctinput( char** string){
char* test;
unsigned int tmp =strtol(*string,&test,10);
if((test[0]!=' ' && test[0]!= '\n' ) || errno != 0 ) {
printf("Don't mock me! Please use the correct input format. \n Information: ");
strerror(errno);
printf(" Next Character: \'%d\'", atoi(test));
free_us();
exit(-1);
}
//printf("test: %s, /n",test);
int i;
for(i=0;(*string)[i]>='0' && (*string)[i]<='9';i++){
*string=(*string)+ i*sizeof(char); // moves the input pointer to the next argument( therefore pointer to pointer)
}
if(*string[i]==' ')string++;
return tmp;
}
void free_us(){
free(start_edge);
free(end_edge);
free(length_edge);
free(base_camp);
free(Dijkstra_dist);
free(Dijkstra_vis);
free(pos_in_vertices);
free(Dijkstra_predec);
free(store_for_reset);
free(found);
}
void *errorchecked_malloc(unsigned int size){
void *ptr;
ptr = malloc(size);
if(ptr == NULL) {
fprintf(stderr, "Error: could not allocate heap memory. \n");
free_us();
exit(-1);
}
return ptr;
}
输入看起来像这样:
0 1 3924456639
0 5 1268156980
0 18 293858388
0 74 142402607
1 4 145988610
....
24
1
27
79
4
70
...
最佳答案
您可能遇到了这个 Windows 特定的 gdb 错误:
https://www.cygwin.com/ml/cygwin/1999-04/msg00308.html
尝试升级到最新版本的 gdb(截至目前为 8.0)。在此版本中,除其他外,还对在 MS-Windows 上进行调试进行了一些增强。参见 NEWS file :
55 * Native debugging on MS-Windows supports command-line redirection
56
57 Command-line arguments used for starting programs on MS-Windows can
58 now include redirection symbols supported by native Windows shells,
59 such as '<', '>', '>>', '2>&1', etc. This affects GDB commands such
60 as "run", "start", and "set args", as well as the corresponding MI
61 features.
关于c - gdb 调试 - 仅在 stdin 内\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44846493/
我有以下代码可以完全按预期工作: from subprocess import Popen process = Popen( ["/bin/bash"], stdin=sys.stdi
我有一个关于 php-cli 的新问题。 我正在使用这个: define("STDIN", fopen('php://stdin','r')); $input = ""; while($input =
这个问题在这里已经有了答案: Can fseek(stdin,1,SEEK_SET) or rewind(stdin) be used to flush the input buffer inste
我正在编写一个 python 程序,它将所有输入都大写(替代非工作 tr '[:lowers:]' '[:upper:]')。语言环境是 ru_RU.UTF-8,我使用 PYTHONIOENCODIN
自从我发现 fflush(stdin) 不是处理熟悉的“换行潜伏在输入缓冲区中”问题的可移植方法,我一直在使用当我必须使用scanf时如下: while((c = getchar()) != '\n'
当我使用时在 Perl 模块( *.pm )文件中,它不会从键盘读取输入,但是当我使用 时在同一个地方它工作得很好。 为什么我使用时没有得到输入? 最佳答案 STDIN 是记录的文件句柄。还有 st
stdin 是否是一个指针,正如我在 fgets() 中看到的那样。 我使用“0”作为标准输入的读取或写入错误,并在 fgets 期间出现段错误。 STDIN宏和0是否相同。 stdin 是文件指针吗
我想知道 STDIN 和 $stdin 之间是否有任何真正的区别。我在 irb: STDIN == $stdin 并返回 true。它们只是同一事物的两个名称吗?还是有什么不同? 最佳答案 来自 Ru
有没有一种简单的方法可以将内容通过管道传输到编辑器原子? 例如: echo "Content." | atom 不幸的是atom没有获取到内容。当前版本的 gedit 具有参数 - 以启用读取 STD
这个问题已经有答案了: Using fflush(stdin) (7 个回答) 已关闭 9 年前。 我有一个这样的测试代码 #include #include #include int main
我有一个 bash启动 scp 的脚本通过以下方式: echo "${SCP_PASS:-$PASSWORD}" | ( exec 3<&0; scp -qp ${SCP_PORT:+-P$SCP_P
我正在创建一个 NASM 汇编代码来从标准输入读取文件中存在的二维数字数组我正在运行这样的可执行文件 -> ./abc < input.txt . 之后,我将在终端上显示读取的二维数组,然后我想获取箭
这是一个循环,它重复地从 stdin 获取两个字符并输出它们。 char buf[2]; while (1) { printf("give me two characters: ");
我有一个 golang 程序,可以为 jq 做一个简单的 repl。 .我希望能够在程序启动时从 stdin 读取输入到一个临时文件中,这样我就可以将 repl 与管道输入一起使用。 cat file
有没有非阻塞的 PHP 从 STDIN 读取: 我试过了: stream_set_blocking(STDIN, false); echo fread(STDIN, 1); 还有这个: $stdin
这实际上与我已经回答的另一个问题有关。这个问题在这里:Redirecting stdout of one process object to stdin of another 我的问题是(我认为)获取
我只是一个java初学者,目前正在大学学习,但由于某些原因我不会深入,我无法询问我的导师。 我在 Netbeans 中使用 StdIn 库时遇到问题。在类里面我们使用 DrJava,但由于我无法让它在
Ruby 有两种引用标准输入的方法:STDIN 常量和$stdin 全局变量。 除了我可以将不同的 IO 对象分配给 $stdin 因为它不是常量(例如,在我的 child 中 fork 重定向 IO
我是 Pythonizer 的作者我正在尝试将 CGI.pm 的代码从标准 perl 库转换为 Python。我在 read_from_client 中看到这段代码: read(\*STDIN, $$
我正在使用 laravel 5.6 并遇到问题,当我在控制台中使用命令“php artisan vendor:publish”时,出现以下错误: [ERROR] Use of undefined co
我是一名优秀的程序员,十分优秀!