我正在尝试在devC ++和Microsoft Visual Studio中引入它:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char* filename;
scanf(" %a[^\n]%*c",&filename);
printf("\n%s",filename);
free(filename);
system("pause");
return(0);
}
当我尝试编译代码时,我得到一个控制台,我在字符串中引入了带有空格的字符串,但是,在此之后,当程序打印字符串时,我得到了一个严谨的。
几年前,我曾经使用这种格式说明符来引入带有几个whithspaces的字符串,现在我遇到了这个问题。这是什么?。我必须使用C,没有关于使用其他语言的其他功能(如fgets)。
答案 0 :(得分:1)
您的代码是赋值分配修饰符,它是GNU扩展名。它在Microsoft Visual Studio中不可用。
不幸的是,没有简单的方法可以使用无限长度的字符串。如果长度可以限制为某个固定数量,请预先分配内存缓冲区,并在格式字符串中指定限制。您还可以在自动存储上预分配缓冲区,如下所示:
var oldhash = null;
processImage: function(image_data) {
var main_response = $q.defer();
var hash = getImageHash(image_data);
oldhash = hash;
var requestsCounter = -1;
requestImage = function(hash) {
if(hash === oldhash){
$http.post(apiUrl, {params: {data: hash},timeout: IMAGE_REQUEST_TIMEOUT})
.then(function(response) {
return main_response.resolve(response.data);
}, function(error) {
if (++requestsCounter < NUMBER_OF_IMAGE_REQUEST_RETRIES) {
requestLabelsImage(hash);
} else {
return main_response.reject();
}
});
}
else {
main_response.reject();
}
}
requestLabelsImage(hash);
return main_response.promise;
}
请注意,char filename[261];
scanf(" %260[^\n]%*c", filename);
printf("\n%s",filename);
有一个额外的filename
空终止。
答案 1 :(得分:0)
在写入指针之前为指针分配内存。然后扫描字符串
char *filename = malloc(100);
scanf("%[^\n]%*c", filename);