我有一个调用 C 函数的 Fortran 子例程。C 函数的参数之一是 fortran 字符串。这被初始化为一个长度为 512 字节的空字符串,并作为 传递给 C 函数trim(str)//char(0)
,即它被修剪并\0
附加 a,以便 C 将其strlen
视为 0。
character(len=512) :: str = ""
call C_foo ( trim(str)//char(0) )
现在在 C 函数内部,我可以这样做吗
strncpy (str, "something", strlen("something") )
我想知道的是,既然trim
是其文档中提到的转换函数,那么将它传递给 C 是否真的会改变分配给它的空间?在 C 函数内部,strncpy 是否会失败(就源字符串的长度而言 < 512)?我试过了,它工作正常,但我想确保它是安全的。