小编mpi*_*olo的帖子

Ruby字符串生锈并再次返回

我试图将Ruby中的字符串传递给生锈的可执行文件,操纵它并将操纵的字符串传回.

到目前为止,我可以传入字符串并返回它,但我不知道如何将其转换为生锈字符串,操纵它然后将其传递回ruby.这是我到目前为止:

// lib.rs
use std::ffi::CStr;

#[no_mangle]
pub extern fn return_string(test_str: &CStr) -> &CStr {
    // working funciton
    test_str
}

#[no_mangle]
pub extern fn manipulate_and_return_string(mystr: &CStr) -> &CStr {
    // mystr type == &std::ffi::c_str::CStr
    // println!("{:?}", mystr); => std::ffi::c_str::CStr` cannot be formatted using `:?`
    let cstr = mystr.to_bytes_with_nul();
    // println!("{:?}", mystr); => []
    // cstr type == &[u8]
    let ptr = cstr.as_ptr();
    // ptr type == *const u8
    // println!("{:?}", mystr); => 0x7fd898edb520
    let str_slice: &str = std::str::from_utf8(cstr).unwrap();
    // str …
Run Code Online (Sandbox Code Playgroud)

ruby string ffi rust

9
推荐指数
1
解决办法
546
查看次数

"预期的结构Foo,发现不同的结构Foo"是什么意思?

我正在尝试构建一个HTML web-scraper,并且遇到了一个我无法通过的障碍.

#![feature(libc)]
#![feature(rustc_private)]
extern crate libc;

extern crate url;
extern crate hyper;
extern crate html5ever;
extern crate serialize;
extern crate html5ever_dom_sink;

#[macro_use]
extern crate tendril;

use tendril::{StrTendril, SliceExt};
use std::ffi::{CStr,CString};
use tendril::{ByteTendril, ReadExt};
use html5ever::{parse, one_input};
use html5ever_dom_sink::common::{Document, Doctype, Text, Comment, Element};
use html5ever_dom_sink::rcdom::{RcDom, Handle};

use hyper::Client;
use hyper::header::Connection;
use std::io::Read;

fn get_page(url: &str) -> String {
    let mut client = Client::new();
    let mut res = client.get(url)
       // set a header
       .header(Connection::close())
       // let 'er go!
       .send().unwrap();

    let mut …
Run Code Online (Sandbox Code Playgroud)

rust

3
推荐指数
1
解决办法
411
查看次数

标签 统计

rust ×2

ffi ×1

ruby ×1

string ×1