我一直在尝试在scanf上使用正则表达式,以便读取最多n个字符的字符串并丢弃其他任何内容,直到新行字符.任何空格都应被视为常规字符,因此包含在要读取的字符串中.我研究了维基百科有关正则表达式的文章,但我无法让scanf正常工作.这是我尝试过的一些代码:
scanf("[ ]*%ns[ ]*[\n]", string);
Run Code Online (Sandbox Code Playgroud)
[]应该用于实际的空格字符,*应该表示一个或多个,n是要读取的字符数,string是用malloc分配的指针.我尝试了几种不同的组合; 但是我倾向于只获得一个句子的第一个单词(停留在空格中).此外,*似乎丢弃一个字符而不是意味着"零或更多"......
任何人都可以详细解释scanf如何解释正则表达式?更重要的是,重复使用getc是否有效?
提前致谢
作为我正在开展的更大项目的一部分,我需要在C程序上使用OpenCV库.我在Fedora 17 32位中使用yum安装了OpenCV和opencv-devel.我指示预处理器导入opencv/cv.h和opencv/highgui.h作为必要的头文件.
正如我所提到的,gcc用于编译整个C项目.但是,链接器似乎存在问题.
每当我尝试编译项目(gcc opencv.c -o opencv
)时,我都会得到一个错误列表,类似于:
/tmp/ccLJWE0c.o: In function `cvRound': opencv.c:(.text+0x19):
undefined reference to `lrint' /tmp/ccLJWE0c.o: In function
`cvDecRefData': opencv.c:(.text+0xa5c): undefined reference to
`cvFree_' opencv.c:(.text+0xacd): undefined reference to `cvFree_'
/tmp/ccLJWE0c.o: In function `cvGetRow': opencv.c:(.text+0xbc3):
undefined reference to `cvGetRows' /tmp/ccLJWE0c.o: In function
`cvGetCol': opencv.c:(.text+0xbee): undefined reference to `cvGetCols'
/tmp/ccLJWE0c.o: In function `cvReleaseMatND': opencv.c:(.text+0xc01):
undefined reference to `cvReleaseMat' /tmp/ccLJWE0c.o: In function
`cvSubS': opencv.c:(.text+0xd21): undefined reference to `cvAddS'
/tmp/ccLJWE0c.o: In function `cvCloneSeq': opencv.c:(.text+0xd6f):
undefined reference to `cvSeqSlice' /tmp/ccLJWE0c.o: In …
Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个持久的问题,似乎没有一个合理的解释.这个问题似乎在于一个for循环,进入内部for (i = size - 1; i >= 0; i--) {etc.}
,其中size
是存储在存储器缓冲器中的文件的大小和i
是无符号整数.它不会停止i == 0
,而是环绕 - 从而导致i = 4294967295
并导致分段错误.更改条件以i > 0
解决问题.
但是,这不是特别的吗?我必须忽略for循环如何在C中运行的一些关键部分.它不遵循这个方案:初始化,检查条件,递增/递减,检查条件等等?
任何帮助表示赞赏!
我正在调试我已经工作了一段时间的项目,并且遇到了一些涉及的疯狂错误free
.我无法上传代码,因为没有办法确切地说出问题所在(大约2500行代码分成22个文件),但我会解释我所知道的.
首先,gdb
正在用于整个调试过程.这个错误似乎从呼叫上升到了free
.gdb
程序退出后,我收到以下错误消息SIGABRT
:
*** Error in `application': free(): invalid next size (normal): 0x08052008 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x767e2)[0xb7e467e2]
/lib/i386-linux-gnu/libc.so.6(+0x77530)[0xb7e47530]
application[0x8049aef]
application[0x804a8aa]
application[0x8048bee]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0xb7de9935]
application[0x8048a51]
======= Memory map: ========
08048000-08050000 r-xp 00000000 00:16 1571817 application
08050000-08051000 r--p 00007000 00:16 1571817 application
08051000-08052000 rw-p 00008000 00:16 1571817 application
08052000-08073000 rw-p 00000000 00:00 0 [heap]
b7d9c000-b7db7000 r-xp 00000000 08:01 1309022 /lib/i386-linux-gnu/libgcc_s.so.1
b7db7000-b7db8000 r--p 0001a000 08:01 1309022 /lib/i386-linux-gnu/libgcc_s.so.1
b7db8000-b7db9000 rw-p 0001b000 08:01 1309022 /lib/i386-linux-gnu/libgcc_s.so.1
b7dce000-b7dd0000 …
Run Code Online (Sandbox Code Playgroud)