-1

私はこの構造を持っていますNode

typedef struct Node{
  unsigned int length;
  char *string;
} Node;

そして、へのポインターを受け入れNode、提供された文字列を添付しようとするこの操作:

int setString(Node *node, char *string){

  char *newString;
  if(!isString(node) || !string) return 0;

  newString = (char *) malloc(strlen(string)+1);
  if(!newString) return 0;

  /*THIS PART FAILS*/
  strncpy(newString,string,sizeof(newString));

  node->string = newString;
  node->length = strlen(newString);

  /*Which can be seen here*/
  printf("Original String: %s\n",string);
  printf("Copied String: %s\n",node->string);

  return 1;
}

示された部分では、元の文字列が にコピーされていないように見えますnode->string。最初の 2 文字をコピーし、その後に続く文字はゴミか単なる空白になります。

この投稿を確認しましたが、OP で機能しているように見える 3 番目のケースに従っています。たぶん私は何かを見落としていましたが、どこにあるのかわかりません

4

4 に答える 4

5
strncpy(newString,string,sizeof(newString));

このコンテキストでsizeofは、あなたが望むことはしません。割り当てたサイズを渡すか、使用しないでくださいstrncpy。独自のロジックに従う場合は、 を呼び出したときに受け取ったstring ので、strlenmallocすでに信頼しています。

そのため、代わりに安全に使用できますstrcpy


少し移植性をなくしたい場合は、次の方法で問題を解決できます。

newString = strdup(string);
于 2013-03-17T10:25:53.453 に答える