繁体   English   中英

Valgrind C:如何从stdio输入字符串

[英]Valgrind C: How to input string from stdio

这是代码:

char* inputString(){
    int n = 5;
    int size = n;
    char* const_str = (char*)malloc((n+1)*sizeof(char));
    char* substring = (char*)malloc((n+n)*sizeof(char)); /*here*/
    char*p;
    while((fgets(const_str,n,stdin)!=NULL)&&(strchr(const_str,'\n')==NULL)){
        strcat(substring,const_str);
        size += n;
        substring = (char*)realloc(substring,size*sizeof(char)); /*here*/
        }
    strcat(substring,const_str);
    size += n;
    substring = (char*)realloc(substring,size*sizeof(char)); /*here*/
    /*
    printf("<%s> is \n",const_str);
    printf("%s is \n",substring);
    printf("%d is \n",size);
    */
    if ((p=strchr(substring,'\n'))!=NULL){
        p[0]='\0';
    }
    if(feof(stdin)){
        changeToFull();
    }
    return substring;
}

并且在valgrind上将不起作用。

我想我在这里有内存泄漏,但是我看不到任何好的解决方案来为valgrind重写此功能。

请帮忙!

我没有尝试过,但是我在一个关于SO的问题上发现了它:

--input-fd=<number> [default: 0, stdin]
          Specify the file descriptor to use for reading  input  from  the
          user.  This  is  used whenever valgrind needs to prompt the user
          for a decision.

这里的原始问题: 使valgrind能够在c ++需要时读取用户输入

编辑:

因此,对于您的情况,您可以尝试:

mkfifo /tmp/abcd
exec 3</tmp/abcd
valgrind_command...... --input-fd=3

&在另一个终端中,使用

cat > /tmp/abcd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM